2013-05-22 24 views
7

Proste pytanie, na które nie mogę znaleźć odpowiedzi. Mam ciąg znaków, który jest sygnaturą czasową, chcę utworzyć go w obiekcie kalendarza, aby móc go wyświetlić w aplikacji na Androida.String timestamp do Calendar in Java?

Kod, który do tej pory wyświetlałem, powoduje, że wszystko w 1970: s.

String timestamp = parameter.fieldParameterStringValue; 
timestampLong = Long.parseLong(timestamp); 
Date d = new Date(timestampLong); 
Calendar c = Calendar.getInstance(); 
c.setTime(d); 
int year = c.get(Calendar.YEAR); 
int month = c.get(Calendar.MONTH); 
int date = c.get(Calendar.DATE); 

dateTextView.setText(year + "-" + month + 1 + "-" + date); 

UPDATE: Wystarczy FYI, datownik jest z serwera jest: 1369148661, Czy to może być źle?

+0

dokąd się znacznik czasu z? Niektóre interfejsy API, które znam, znikają z 1000, aby zaoszczędzić miejsce. czyli jedna sekunda dokładności –

+0

Z serwera, który uruchamiamy. Znacznik czasu jest poprawny, potrójnie sprawdziłem wartość i jest ona poprawna na serwerze. –

+0

Czy możesz spróbować zrobić 'c.setTimeInMillis (timestampLong);', aby sprawdzić, czy masz taki sam wynik? –

Odpowiedz

15

Jeśli masz czas w sekundach, trzeba pomnożyć przez 1000:

String time = "1369148661"; 
long timestampLong = Long.parseLong(time)*1000; 
Date d = new Date(timestampLong); 
Calendar c = Calendar.getInstance(); 
c.setTime(d); 
int year = c.get(Calendar.YEAR); 
int month = c.get(Calendar.MONTH); 
int date = c.get(Calendar.DATE); 
System.out.println(year +"-"+month+"-"+date); 

wyjściowa:

2013-4 -21

Pielęgnacja ponieważ stała na Calendar.MONTH zaczyna od 0. Dlatego należy go wyświetlić w ten sposób dla użytkownika:

System.out.println(year +"-"+(month+1)+"-"+date); 
+0

Skończyło się na pomijaniu konwersji daty, ale poza tym jest to ten sam kod, którego użyłem. Zwłaszcza z (miesiącem +1), który rzucił mi na początku. –

+0

Doskonała odpowiedź. Oszczędzasz mój dzień i świetne rozwiązanie –

18

Można używać setTimeMillis:

Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(timestampLong);