2012-03-17 9 views
16

Widziałem to pytanie wielokrotnie i żadna z odpowiedzi nie wydaje się być tym, czego potrzebuję.Konwertowanie czasu epoki na bieżący ciąg

Mam długą zmienną typu, która zawiera czas epoki.

co chcę zrobić, to przekonwertować go na ciąg

na przykład wtedy, gdy czas był przechowywany epoka dzisiaj końcowy ciąg byłoby przeczytać:

17/03/2012

Jak do tego?

Odpowiedz

26

zajrzeć do SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
sdf.format(new Date(myTimeAsLong)); 
+0

Ive dostał, aby wydrukować ciąg w odpowiednim formacie, ale drukuje niepoprawną datę, którą daje dzisiejszą datę jako 16/00/1970. The Long used was 1332026487. – nexus490

+0

To dlatego, że możesz potrzebować bawić się z parametrem, który przekazałeś w konstruktorze. Możesz znaleźć wszystkie możliwości wyświetlania w Jav API – Reinard

+4

Ta odpowiedź: drukuje * minutę * zamiast * miesiąc *; ignoruje wybór kultury (co jest bardzo ważne); ignoruje wybór strefy czasowej (co jest niezwykle ważne). Naprawdę musisz myśleć o tych rzeczach - to nie jest żadna pomoc (IMO), aby je po prostu zignorować. –

20

Można by stworzyć Date z long - to proste:

Date date = new Date(epochTime); 

Zauważ, że epochTime tutaj powinno być w milisekund od epoki - jeśli masz sekund od epoki, należy pomnożyć przez 1000.

Następnie należy utworzyć SimpleDateFormat określając odpowiedni wzór, kulturę i strefę czasową. Na przykład:

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy", Locale.US); 
format.setTimeZone(...); 

Następnie używać, aby sformatować datę na ciąg znaków:

String text = format.format(date); 
+0

Co powinienem wstawić do argumentu Strefa czasowa? – nexus490

+0

@ nexus490: Jaką strefę czasową chcesz reprezentować? Na przykład za godzinę będzie to 18/03/2012 w * my * strefie czasowej, ale w USA będzie to nadal 17.03.2012, tyle samo milisekund od epoki. Jaka byłaby właściwa odpowiedź? To jest coś tylko * ty * wiesz, jak znasz swoje wymagania aplikacji (miejmy nadzieję). Może chcesz UTC. Może chcesz systemową lokalną strefę czasową. Może chcesz mieć domową strefę czasową użytkownika. –

+0

Dziękuję za podkreślenie tego: "jeśli masz ** sekundy ** od epoki, pomnóż przez ** 1000 **." – Metallica

0

trzeba mieć świadomość, że czas epoka w Java jest w milisekundy, podczas gdy konwersja może nastąpić w kilka sekund. Upewnij się, że obie strony konwersji są w milisekundach, a następnie możesz pobrać parametry daty z obiektu Date.

+0

A dlaczego miałbym konwertować milisekundy na milisekundy? –

+0

Mój błąd, mam na myśli to, że powinieneś zapewnić obie strony konwersji w milisekundach. – Ajibola

2

Joda-Time

Jeśli przez czas epoki masz na myśli liczbę milisekund od pierwszej chwili 1970 UTC, to tutaj jest jakiś przykład kodu przy użyciu biblioteki Joda-Time ...

DateTimeZone timeZone = DateTimeZone.forID("Europe/Paris"); 
DateTime dateTime = new DateTime(yourMilliseconds, timeZone); 
String output = DateTimeFormat.forStyle("S-").withLocale(Locale.CANADA_FRENCH).print(dateTime); 

Inne Epoki

Ta definicja epoki jest powszechna ze względu na jej użycie w systemie Unix. Należy jednak pamiętać, że co najmniej jeden model couple dozen epoch definitions jest używany przez różne systemy komputerowe.

11
Date date = new Date(String); 

to jest przestarzałe.

rozwiązanie

Date date = new Date(1406178443 * 1000L); 
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 
    format.setTimeZone(TimeZone.getTimeZone("Etc/UTC")); 
    String formatted = format.format(date); 

upewnić pomnożyć przez 1000L

+3

Tylko drobny komentarz, musisz zmienić HH: MM: ss.SSS na HH: mm: ss.SSS - MM to miesiąc, a nie minuty. – Leo

+0

dziękuję Damith: D –

0

Spróbuj tego ...

próbka Epoki timestamp jest 1414492391238

Metoda:

public static String GetHumanReadableDate(long epochSec, String dateFormatStr) { 
    Date date = new Date(epochSec * 1000); 
    SimpleDateFormat format = new SimpleDateFormat(dateFormatStr, 
      Locale.getDefault()); 
    return format.format(date); 
} 

Użyteczność:

long timestamp = Long.parseLong(engTime)/1000; 
String engTime_ = GetHumanReadableDate(timestamp, "dd-MM-yyyy HH:mm:ss aa"); 

Wynik:

28-10-2014 16:03:11 pm

Szczęśliwy kodowania

+1

3 problemy z tą odpowiedzią. Ta odpowiedź ignoruje kluczową kwestię strefy czasowej. Ta odpowiedź używa innego formatu niż wymagany w pytaniu. Ta odpowiedź zasadniczo powiela trzy inne odpowiedzi opublikowane miesiąc temu. Nie widzę tutaj żadnej wartości dodanej. –

0

oparte na poprzednich odpowiedzi, podczas przechodzenia domyślnego systemu Locale i TimeZone ...

String epochToIso8601(long time) { 
    String format = "yyyy-MM-dd HH:mm:ss"; 
    SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault()); 
    sdf.setTimeZone(TimeZone.getDefault()); 
    return sdf.format(new Date(time * 1000)); 
} 
0

spróbować

Date date = new Date(1476126532838L); 
DateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); 
format.setTimeZone(TimeZone.getTimeZone("Etc/UTC")); 
String formatted = format.format(date); 
format.setTimeZone(TimeZone.getTimeZone("Asia/Colombo"));//your zone 
formatted = format.format(date); 
System.out.println(formatted); 
Powiązane problemy