2013-07-02 28 views
37

Làm cách nào tôi có thể chuyển đổi phút từ dấu thời gian unix thành ngày giờ trong java. Ví dụ: dấu thời gian 1372339860 tương ứng với Thu, 27 Jun 2013 13:31:00 GMT.Chuyển đổi tem thời gian unix thành hiện thực trong java

Tôi muốn chuyển đổi 1372339860 thành 2013-06-27 13:31:00 GMT.

Chỉnh sửa: Thực ra tôi muốn nó theo thời gian của Mỹ GMT-4, vì vậy nó sẽ là 2013-06-27 09:31:00.

+0

'DateTime bất cứ điều gì = new DateTime (yourunixtimestampaslong * 1000L, DateTimeZone.UTC); 'nếu bạn sử dụng [JodaTime] (http://joda-time.sourceforge.net/). Hoặc 'DateTime bất cứ điều gì = new DateTime (yourunixtimestampaslong * 1000L, DateTimeZone.forOffsetHours (-4));' cho ví dụ thứ hai của bạn. Javadoc [ở đây] (http://joda-time.sourceforge.net/apidocs/index.html) – fvu

+0

Định dạng SimpleDateFormat = new SimpleDateFormat ("dd-MM-yyyy HH: mm: ss"); –

Trả lời

115

Bạn có thể sử dụng SimlpeDateFormat để định dạng ngày của bạn như thế này:

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

Các mô hình mà SimpleDateFormat mất nếu rất linh hoạt, bạn có thể kiểm tra trong javadocs tất cả các biến thể mà bạn có thể sử dụng để tạo ra các định dạng khác nhau dựa trên các mẫu bạn viết được đưa ra cụ thể Date. http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

  • Bởi vì một Date cung cấp một phương pháp getTime() mà trả về mili giây kể từ EPOC, nó là cần thiết rằng bạn cung cấp cho SimpleDateFormat một múi giờ để định dạng ngày đúng theo công múi giờ của bạn, nếu không nó sẽ sử dụng múi giờ mặc định của JVM (mà nếu được cấu hình sẽ anyways là đúng)
+0

Sửa đổi, nhờ @fvu –

+2

câu trả lời này là tốt hơn, bởi vì tác giả cũng đưa ra một ví dụ làm thế nào để tôn trọng múi giờ. – drdrej

+1

Tuyệt vời! Btw để nhận múi giờ hiện tại của thiết bị, chúng ta có thể sử dụng 'TimeZone.getDefault()' – Atul

10

Bạn cần phải chuyển nó sang mili giây bằng cách nhân timestamp 1000:

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

lưu ý rằng câu hỏi là để chuyển đổi phút epoch cho đến nay, và sau đó formtat nó vào một mô hình với một bù đắp múi giờ –

26

Java 8 giới thiệu các phương pháp Instant.ofEpochSecond tiện ích cho việc tạo ra một Instant từ một dấu thời gian Unix, điều này sau đó có thể được chuyển đổi thành một ZonedDateTime và cuối cùng định dạng, ví dụ:

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' 

Tôi nghĩ điều này có thể có ích cho những người đang sử dụng Java 8.

+0

Phần lớn chức năng java.time được chuyển sang Java 6 & 7 trong [ThreeTen-Backport] (http://www.threeten.org/threetenbp/) và tiếp tục thích nghi với [Android] (https: //en.wikipedia. org/wiki/Android_ (operating_system)) trong [ThreeTenABP] (https://github.com/JakeWharton/ThreeTenABP) (xem [* Cách sử dụng… *] (http://stackoverflow.com/q/38922754/642706)). –

+0

Ví dụ về giá trị bù trừ từ UTC ('GMT-4') phù hợp hơn với [' OffsetDateTime'] (https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime .html) so với 'ZonedDateTime'. Ngoài ra, tôi khuyên bạn nên chia nhỏ mã ví dụ thành từng phần để giới thiệu từng bước và từng ý tưởng riêng biệt. –

Các vấn đề liên quan