2013-09-21 11 views
25

Ho un problema nel visualizzare la data, sto ricevendo il timestamp come 1379487711 ma in questo caso l'ora effettiva è 18/18/2013 12:31:51 PM ma visualizza l'ora come 17-41-1970. Come mostrarlo come ora corrente.converte timestamp in data corrente in android

per la visualizzazione volta ho usato il seguente metodo:

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()); 
} 
+0

Sei sicuro che questo è in mili-secondi e non in secondi semplici? utilizzare questo per controllare il tuo tempo: http://www.onlineconversion.com/unix_time.htm – Sean

+0

Quando ho controllato la risposta è Mer, 18 set 2013 07:01:51 UTC – jkk

+0

Sto usando timestamp come lungo tempo = System.currentMilliSeconds ; – jkk

risposta

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

avviso che ho messo il tempo in setTimeInMillis come lunghi e non come int, notare il mio formato della data è MM e non mm (mm è per minuti, e non mesi, questo è il motivo per cui si ha un valore di "41", dove i mesi dovrebbero essere)

+1

Ma DateFormat.format ("gg-MM-aaaa", cal) .toString(); mostrando un errore e l'anno fermo mostra 1970 – jkk

+0

che errore mostra? –

+3

l'importazione per DateFormat è: import android.text.format.DateFormat; –

7

convertire timestamp in data odierna:

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; 
    } 
+0

Molto bene .. stavo facendo uno stupido errore .. ho dimenticato di moltiplicare .. Grazie per l'aiuto – Noman

7

Per la conversione data e ora l'ora corrente

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(); 
+0

Questo ha funzionato per me. – MSaudi

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

Il tipo di variabile time_stamp_value è lungo

con il codice che sarà simile modo:

private String getDate(long time_stamp_server) { 

    SimpleDateFormat formatter = new SimpleDateFormat("dd-mm-yyyy"); 
    return formatter.format(time_stamp_server); 
} 

Ho cambiato "millisecondi" in time_stamp_server. Valuta di cambiare il nome di millisecondo in "c" o in qualcosa di più globale. "c" è veramente buono perché si riferisce al tempo e al computing in un modo molto più globale di quanto non faccia il millisecondo. Quindi, non hai necessariamente bisogno di un oggetto calendario da convertire e dovrebbe essere così semplice.

0

Se si desidera visualizzare il messaggio di chat come l'app, utilizzare il metodo seguente. formato della data che desideri modificare in base alle tue esigenze.

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; 
} 
+1

FYI, queste vecchie classi fastidiose sono ormai obsolete, soppiantate dalle classi java.time. Per Android vedi i progetti ThreeTen-Backport e ThreeTenABP. –

0

tl; dr

Si dispone di un certo numero di secondi interi dal 1970-01-01T00:00:00Z piuttosto che millisecondi.

Instant.ofEpochSecond(1_379_487_711L) 
     .toString() 

2013-09-18T07: 01: 51Z

secondi

intere contro millisecondi

Come detto sopra, è confuso un conteggio-of-secondi con un count-di- millisecondi.

Utilizzando java.time

Le altre risposte possono essere corrette, ma non sono aggiornati. Le fastidiose vecchie lezioni di data-ora usate ora sono legacy, soppiantate dalle classi java.time. Per Android, guarda gli ultimi proiettili di seguito.

La classe Instant rappresenta un momento sulla timeline in UTC con una risoluzione di nanoseconds (fino a nove (9) cifre di una frazione decimale).

Instant instant = Instant.ofEpochSecond(1_379_487_711L) ; 

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

Applicare il fuso orario attraverso il quale si desidera visualizzare questo momento.

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

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

Vedere questo code run live at IdeOne.com.


Chi java.time

Il quadro java.time è costruito in Java 8 e versioni successive. Queste classi soppiantano le fastidiose classi data legacy come java.util.Date, Calendar, & SimpleDateFormat.

Il progetto Joda-Time, ora in maintenance mode, consiglia la migrazione alle classi java.time.

Per ulteriori informazioni, vedere Oracle Tutorial. E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310.

Dove ottenere le classi java.time?

Il progetto ThreeTen-Extra java.time prolunga con classi aggiuntive.Questo progetto è un terreno di prova per possibili aggiunte future a java.time. È possibile trovare alcune classi utili come Interval, YearWeek, YearQuarter e more.

Problemi correlati