2013-07-02 12 views
37

Jak mogę przekonwertować minuty ze znacznika czasu unixa na datę i godzinę w java. Na przykład znacznik czasu 1372339860 odpowiada Thu, 27 Jun 2013 13:31:00 GMT.Konwersja znacznika czasowego unixa do tej pory w java

Chcę przekonwertować 1372339860 na 2013-06-27 13:31:00 GMT.

Edytuj: Właściwie chcę, aby było zgodne z GMT-4 w USA, więc będzie to 2013-06-27 09:31:00.

+0

'DateTime cokolwiek = new DateTime (yourunixtimestampaslong * 1000L, DateTimeZone.UTC);' jeśli używasz [JodaTime] (http://joda-time.sourceforge.net/). Lub 'DateTime what = new DateTime (yourunixtimestampaslong * 1000L, DateTimeZone.forOffsetHours (-4));" dla twojego drugiego przykładu. Javadoc [tutaj] (http://joda-time.sourceforge.net/apidocs/index.html) – fvu

+0

SimpleDateFormat format = new SimpleDateFormat ("dd-MM-rrrr HH: mm: ss"); –

Odpowiedz

115

Można użyć SimlpeDateFormat formatować datę tak:

long unixSeconds = 1372339860; 
// convert seconds to milliseconds 
Date date = new Date(unixSeconds*1000L); 
// the format of your date 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); 
// give a timezone reference for formatting (see comment at the bottom) 
sdf.setTimeZone(TimeZone.getTimeZone("GMT-4")); 
String formattedDate = sdf.format(date); 
System.out.println(formattedDate); 

Wzór że SimpleDateFormat bierze jeśli bardzo elastyczny, możesz sprawdzić w javadocs wszystkie warianty, których możesz użyć do utworzenia innego formatowania na podstawie zapisanych wzorców, podając konkretną wartość Date. http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

  • Ponieważ Date zapewnia getTime() metodę, która zwraca milisekund od EPOC, wymagane jest, aby dać do SimpleDateFormat strefę czasową, aby sformatować datę prawidłowo acording do swojej strefy czasowej, w przeciwnym razie użyje domyślnej strefy czasowej z następujących JVM (które, jeżeli jakikolwiek również skonfigurowana zaraz)
+0

Zmodyfikowany, dzięki @fvu –

+2

ta odpowiedź jest lepsza, ponieważ autor również daje przykład, jak szanować strefy czasowe. – drdrej

+1

Doskonale! Btw, aby uzyskać aktualną strefę czasową urządzenia, możemy użyć 'TimeZone.getDefault()' – Atul

10

Trzeba przekonwertować go do milisekund przez pomnożenie znacznika czasu przez 1000:

java.util.Date dateTime=new java.util.Date((long)timeStamp*1000); 
+0

Zauważ, że pytanie dotyczy zamiany minut epoki na datę, a następnie sformatowania go na wzór z przesunięciem strefy czasowej –

26

Java 8 przedstawia metodę Instant.ofEpochSecond użytkowego do tworzenia Instant ze znacznikiem czasu Unix, może być następnie przekształcony w ZonedDateTime i wreszcie sformatowanych np

final DateTimeFormatter formatter = 
    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 

final long unixTime = 1372339860; 
final String formattedDtm = Instant.ofEpochSecond(unixTime) 
     .atZone(ZoneId.of("GMT-4")) 
     .format(formatter); 

System.out.println(formattedDtm); // => '2013-06-27 09:31:00' 

Pomyślałem, że może to być przydatne dla ludzi, którzy są przy użyciu języka Java 8.

+0

Większość z funkcjonalność java.time została przeniesiona z powrotem do Java 6 i 7 w [ThreeTen-Backport] (http://www.threeten.org/threetenbp/) i dalej dostosowana do [Android] (https: //en.wikipedia. org/wiki/Android_ (operating_system)) w [ThreeTenABP] (https://github.com/JakeWharton/ThreeTenABP) (zobacz [* Jak korzystać ... *] (http://stackoverflow.com/q/38922754/642706)). –

+0

Twój przykład przesunięcia z UTC ('GMT-4') jest bardziej odpowiedni dla [' OffsetDateTime'] (https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime .html) niż 'ZonedDateTime'. Proponuję również rozbicie twojego przykładowego kodu na części, aby przedstawić każdy krok i każdy pomysł osobno. –

Powiązane problemy