converteer tijdstempel naar huidige datum in Android

Ik heb een probleem met het weergeven van de datum. Ik krijg een tijdstempel als 1379487711, maar de huidige tijd is 18-9-2013 12:31:51 PM, maar de tijd wordt weergegeven als 17-41-1970. Hoe het als huidige tijd te tonen.

voor het weergeven van de tijd heb ik de volgende methode gebruikt:

private String getDate(long milliSeconds) {
    // Create a DateFormatter object for displaying date in specified
    // format.
    SimpleDateFormat formatter = new SimpleDateFormat("dd-mm-yyyy");
    // Create a calendar object that will convert the date and time value in
    // milliseconds to date.
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis((int) milliSeconds);
    return formatter.format(calendar.getTime());
} 

Antwoord 1, autoriteit 100%

private String getDate(long time) {
    Calendar cal = Calendar.getInstance(Locale.ENGLISH);
    cal.setTimeInMillis(time * 1000);
    String date = DateFormat.format("dd-MM-yyyy", cal).toString();
    return date;
}

merk op dat ik de tijd in setTimeInMillis zo lang zet en niet als int, merk op dat mijn datumnotatie MM heeft en niet mm (mm is voor minuten, en niet maanden, daarom heb je een waarde van “41” waar de maanden zouden moeten staan)

voor Kotlin-gebruikers:

fun getDate(timestamp: Long) :String {
   val calendar = Calendar.getInstance(Locale.ENGLISH)
   calendar.timeInMillis = timestamp * 1000L
   val date = DateFormat.format("dd-MM-yyyy",calendar).toString()
   return date
}

COMMENTAAR MOET NIET VERWIJDERD WORDEN:
Geachte persoon die dit bericht probeert te bewerken– het volledig veranderen van de inhoud van het antwoord is, geloof ik, in strijd met de gedragsregels van deze site.
Gelieve dit in de toekomst niet meer te doen. -LenaBru


Antwoord 2, autoriteit 12%

Voor het converteren van een tijdstempel naar de huidige tijd

Calendar calendar = Calendar.getInstance();
TimeZone tz = TimeZone.getDefault();
calendar.add(Calendar.MILLISECOND, tz.getOffset(calendar.getTimeInMillis()));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
java.util.Date currenTimeZone=new java.util.Date((long)1379487711*1000);
Toast.makeText(TimeStampChkActivity.this, sdf.format(currenTimeZone), Toast.LENGTH_SHORT).show();

Antwoord 3, autoriteit 9%

converteer tijdstempel naar huidige datum:

private Date getDate(long time) {    
    Calendar cal = Calendar.getInstance();
       TimeZone tz = cal.getTimeZone();//get your local time zone.
       SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm a");
       sdf.setTimeZone(tz);//set time zone.
       String localTime = sdf.format(new Date(time) * 1000));
       Date date = new Date();
       try {
            date = sdf.parse(localTime);//get local date
        } catch (ParseException e) {
            e.printStackTrace();
        }
      return date;
    }

Antwoord 4, autoriteit 4%

 DateFormat df = new SimpleDateFormat("HH:mm", Locale.US);
  final String time_chat_s = df.format(time_stamp_value);

Het variabele type time_stamp_value is lang

Met uw code ziet het er ongeveer zo uit:

private String getDate(long time_stamp_server) {
    SimpleDateFormat formatter = new SimpleDateFormat("dd-mm-yyyy");
    return formatter.format(time_stamp_server);
} 

Ik verander “milliseconden” in time_stamp_server. Overweeg om de naam van milliseconde te wijzigen in ‘c’ of in iets meer algemeens. “c” is echt goed omdat het betrekking heeft op tijd en computergebruik op een veel globalere manier dan milliseconden. Je hebt dus niet per se een kalenderobject nodig om te converteren en zo simpel zou het moeten zijn.


Antwoord 5, autoriteit 4%

Als je resultaat altijd 1970 is, probeer het dan op deze manier:

Calendar cal = Calendar.getInstance(Locale.ENGLISH);
cal.setTimeInMillis(timestamp * 1000L);
String date = DateFormat.format("dd-MM-yyyy hh:mm:ss", cal).toString();

U moet uw TS-waarde vermenigvuldigen met 1000

Het is zo gemakkelijk te gebruiken.


Antwoord 6, autoriteit 3%

tl;dr

Je hebt een aantal hele secondensinds 1970-01-01T00:00:00Zin plaats van milliseconden.

Instant
.ofEpochSecond( 1_379_487_711L )
.atZone( 
    ZoneId.of( "Africa/Tunis" ) 
)
.toLocalDate()
.format(
    DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) 
)

2013-09-18T07:01:51Z

Hele seconden versus milliseconden

Zoals hierboven vermeld, verwarde u het aantal seconden met het aantal milliseconden.

Java.time gebruiken

De andere antwoorden kunnen correct zijn, maar zijn verouderd. De lastige oude datum-tijd-klassen die daar worden gebruikt, zijn nu legacy, verdrongen door de java.time-klassen. Zie voor Android de laatste opsommingstekens hieronder.

De Instantklasse vertegenwoordigt een moment op de tijdlijn in UTCmet een resolutie van nanoseconden(maximaal negen (9) cijfers van een decimale breuk).

Instant instant = Instant.ofEpochSecond( 1_379_487_711L ) ;

instant.toString(): 2013-09-18T07:01:51Z

Pas de tijdzone toe waardoor u dit moment wilt bekijken.

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

zdt.toString(): 2013-09-18T03:01:51-04:00[Amerika/Montreal]

Genereer een tekenreeks die deze waarde in uw gewenste formaat vertegenwoordigt.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
String output = zdt.format( f ) ;

18-09-2013

Zie deze code die live wordt uitgevoerd op IdeOne.com.


Over java.time

De java.timeframework is ingebouwd in Java 8 en hoger. Deze klassen vervangen de lastige oude legacydatum-tijdklassen zoals java.util.Date, Calendar, &amp ; SimpleDateFormat.

Het Joda-Time-project, nu in onderhoudsmodus, adviseert migratie naar de java.timeklassen.

Zie de Oracle-zelfstudievoor meer informatie. En zoek Stack Overflow voor veel voorbeelden en uitleg. Specificatie is JSR 310.

Waar zijn de java.time-klassen te verkrijgen?

Het ThreeTen-Extra-project verlengt java.time met extra lessen. Dit project is een proeftuin voor mogelijke toekomstige toevoegingen aan java.time. Mogelijk vindt u hier enkele nuttige klassen, zoals Interval, YearWeek, YearQuarteren meer.


Antwoord 7, autoriteit 2%

Ik heb dit hier vandaan: http://www.java2s .com/Code/Android/Date-Type/CreateDatefromtimestamp.htm

Geen van de bovenstaande antwoorden werkte voor mij.

Calendar c = Calendar.getInstance();
c.setTimeInMillis(Integer.parseInt(tripBookedTime) * 1000L);
Date d = c.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy");
return sdf.format(d);

En trouwens: ("dd-MM-yyyy", cal)wordt niet herkend door Android – “Kan methode niet oplossen”.


Antwoord 8

Als je wilt dat het chatbericht eruitziet als een app, gebruik dan de onderstaande methode. datumnotatie die u wilt wijzigen volgens uw vereiste.

public String DateFunction(long timestamp, boolean isToday)
{
    String sDate="";
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
    Calendar c = Calendar.getInstance();
    Date netDate = null;
    try {
        netDate = (new Date(timestamp));
        sdf.format(netDate);
        sDate = sdf.format(netDate);
        String currentDateTimeString = sdf.format(c.getTime());
        c.add(Calendar.DATE, -1);
        String yesterdayDateTimeString =  sdf.format(c.getTime());
        if(currentDateTimeString.equals(sDate) && isToday) {
            sDate = "Today";
        } else if(yesterdayDateTimeString.equals(sDate) && isToday) {
            sDate = "Yesterday";
        }
    } catch (Exception e) {
        System.err.println("There's an error in the Date!");
    }
    return sDate;
}

Antwoord 9

huidige datum en tijd:

private String getDateTime() {
        Calendar calendar = Calendar.getInstance(Locale.ENGLISH);
        Long time = System.currentTimeMillis();
        calendar.setTimeInMillis(time);
       //dd=day, MM=month, yyyy=year, hh=hour, mm=minute, ss=second.
        String date = DateFormat.format("dd-MM-yyyy hh:mm:ss",calendar).toString();
        return date;
    }

Opmerking: als je resultaat altijd 1970 is, probeer het dan op deze manier:

Calendar calendar = Calendar.getInstance(Locale.ENGLISH);
calender.setTimeInMillis(time * 1000L);
String date = DateFormat.format("dd-MM-yyyy hh:mm:ss", calendar).toString();

Antwoord 10

GEBRUIK NIEUWE–> JAVA.TIME VOOR ANDROID-APPS TARGETING >API26

DATUMTIJDSTEMPEL OPSLAAN

@RequiresApi(api = Build.VERSION_CODES.O)
    public long insertdata(String ITEM, String INFORMATION, Context cons)
    {
        long result=0; 
            // Create a new map of values, where column names are the keys
            ContentValues values = new ContentValues();
            LocalDateTime INTIMESTAMP  = LocalDateTime.now();
            values.put("ITEMCODE", ITEM);
            values.put("INFO", INFORMATION);
            values.put("DATETIMESTAMP", String.valueOf(INTIMESTAMP));
            try{
                result=db.insertOrThrow(Tablename,null, values);            
            } catch (Exception ex) {
                Log.d("Insert Exception", ex.getMessage());
            }
            return  result;
    }   

INGEVOERDE DATUMTIJDStempel ZAL IN LOKALE DATETIMEFORMAT ZIJN[2020-07-08T16:29:18.647] die geschikt is om weer te geven.

Hopelijk helpt het!

Other episodes