2013-09-21 31 views
25

Mam problem z wyświetlaniem daty, otrzymuję sygnaturę czasową jako 1379487711, ale według bieżącego czasu jest 9/18/2013 12:31:51 PM, ale wyświetla czas jako 17-41-1970. Jak pokazać to jako aktualny czas.Konwertuj znacznik czasu na aktualną datę w Androidzie

za czas wyświetlania Użyłem następujący sposób:

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

Czy jesteś pewien, że jest to w mili-sekundach, a nie w prostych sekundach? użyj tego, aby sprawdzić swój czas: http://www.onlineconversion.com/unix_time.htm – Sean

+0

Kiedy sprawdziłem odpowiedź jest środa, 18 września 2013 07:01:51 UTC – jkk

+0

Używam znacznika czasu jako długiego czasu = System.currentMilliSeconds ; – jkk

Odpowiedz

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

Zauważ, że umieścić w czasie setTimeInMillis tak długo, a nie jako int, zauważy mój format daty posiada mm i mm (mm dla minut, a nie miesięcy, to dlaczego mają wartość „41”, gdzie miesiąc powinien być)

+1

Ale DateFormat.format ("dd-MM-rrrr", cal) .toString(); pokazuje błąd i nadal pokazuje rok 1970 – jkk

+0

jaki błąd pokazuje? –

+3

import dla DateFormat: import android.text.format.DateFormat; –

7

convert znacznik czasu do aktualnej daty:

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

Bardzo dobrze .. Robiłem głupi błąd .. zapomniałem pomnożyć .. Dzięki za pomoc – Noman

7

Do konwersji znacznika czasu do czasu bieżącego

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

Ten pracował dla mnie. – MSaudi

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

time_stamp_value typ zmiennej jest długo

z kodem będzie to wyglądać mniej więcej tak:

private String getDate(long time_stamp_server) { 

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

Zmieniam "milliseconds" na time_stamp_server. Rozważ zmianę nazwy milisekundy na "c" lub na coś bardziej globalnego. "c" jest naprawdę dobre, ponieważ odnosi się do czasu i do komputerów w znacznie bardziej globalny sposób niż milisekundy. Niekoniecznie potrzebujesz więc konwertować obiekt kalendarza i powinno to być tak proste.

0

Jeśli chcesz, aby wiadomość na czacie wyglądała jak w aplikacji, użyj poniższej metody. format daty, który chcesz zmienić zgodnie z wymaganiami.

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, te kłopotliwe stare klasy są teraz starsze, wyparte przez klasy java.time. W systemie Android zobacz projekty ThreeTen-Backport i ThreeTenABP. –

0

tl; dr

Masz liczbę całych sekund od 1970-01-01T00:00:00Z zamiast milisekund.

Instant.ofEpochSecond(1_379_487_711L) 
     .toString() 

2013-09-18T07: 01: 51Z

Całe sekund porównaniu milisekundach

Jak stwierdzono powyżej, mylić licznik-of-sekund z mnożnikiem z eksploatacji milisekundy.

Korzystanie java.time

innych odpowiedzi mogą być prawidłowe, ale są przestarzałe. Kłopotliwe stare klasy czasu i daty są teraz dostępne, zastąpione przez klasy java.time. W przypadku Androida zapoznaj się z ostatnimi punktami poniżej.

Klasa Instant reprezentuje moment na osi czasu w UTC z rozdzielczością nanoseconds (do dziewięciu (9) cyfr ułamka dziesiętnego).

Instant instant = Instant.ofEpochSecond(1_379_487_711L) ; 

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

Zastosuj strefę czasową, przez które chcesz wyświetlić ten moment.

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

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

Zobacz ten code run live at IdeOne.com.


O java.time

Ramy java.time jest wbudowana w Java 8 i późniejszych. Klasy te zastępują kłopotliwe stare klasy z datami, takie jak java.util.Date, Calendar, & SimpleDateFormat.

Projekt Joda-Time, teraz w maintenance mode, zaleca migrację do klas java.time. Aby uzyskać więcej informacji, zobacz

. I wyszukaj Stack Overflow dla wielu przykładów i objaśnień. Specyfikacja to JSR 310.

Gdzie można uzyskać lekcje java.time?

Projekt ThreeTen-Extra rozciąga java.time z dodatkowych zajęć.Ten projekt jest poligonem wskazującym na możliwe przyszłe dodatki do java.time. Możesz znaleźć tutaj kilka użytecznych klas, takich jak Interval, YearWeek, YearQuarter i more.

Powiązane problemy