2011-11-24 74 views

Trả lời

1

Bí quyết là sử dụng java.util.Datejava.text.DateFormat để nhận định dạng bạn muốn. Bạn có thể tra cứu cách thực hiện trong tutorials on the Web.

7
long yourSeconds = 1320105600L; 
Date d = new Date(yourSeconds * 1000); 

Ở đây javadoc là mô tả. Hàm khởi tạo cần miliseconds.

Để hiển thị ngày này ở định dạng thích hợp bạn nên kiểm tra DataFormat

Dưới đây là một số ví dụ:

DateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm:ss zzz"); 
System.out.println(df.format(date)); 
23

Trong trường hợp bạn đang bị hạn chế di sản java.util.Datejava.util.Calendar API, bạn cần phải đưa vào tài khoản rằng dấu thời gian được diễn giải bằng mili giây, không phải giây. Vì vậy, trước tiên bạn cần phải nhân nó với 1000 để có được dấu thời gian tính bằng mili giây.

long seconds = 1320105600; 
long millis = seconds * 1000; 

Bằng cách này bạn có thể cấp dữ liệu cho a.o. hàm tạo của java.util.Date và cuối cùng sử dụng SimpleDateFormat để chuyển đổi java.util.Date thành java.lang.String trong mẫu định dạng ngày mong muốn, nếu cần với múi giờ được xác định trước (nếu không, nó sẽ sử dụng hệ thống default time zone, không phải là GMT/UTC cho mỗi lần truy cập. có thể tắt).

Date date = new Date(millis); 
SimpleDateFormat sdf = new SimpleDateFormat("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH); 
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
String formattedDate = sdf.format(date); 
System.out.println(formattedDate); // Tuesday,November 1,2011 12:00,AM 

Trong trường hợp bạn đã có trên Java8, có một LocalDateTime#ofEpochSecond() cho phép bạn để nuôi kỷ nguyên giây trực tiếp mà không cần nhân vào mili giây hương vị.

LocalDateTime dateTime = LocalDateTime.ofEpochSecond(seconds, 0, ZoneOffset.UTC); 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH); 
String formattedDate = dateTime.format(formatter); 
System.out.println(formattedDate); // Tuesday,November 1,2011 12:00,AM 
+0

Vui lòng giải thích chi tiết kết quả bạn đạt được và kết quả bạn mong đợi. Tôi không trực tiếp có thể chiếu trực tiếp vào bạn để xem vấn đề bằng chính mắt tôi. Tôi ít nhất có thể nói rằng mã được đăng chạy tốt cho tôi và tôi nhận được kết quả như được hiển thị trong phần bình luận của dòng cuối cùng. – BalusC

+0

Trên thực tế tôi đã thực hiện một sai lầm để gửi câu hỏi rõ ràng.Here iam làm việc với thời gian chicago Mỹ. Và giây của tôi là 1320105600.The kết quả chính xác cho câu hỏi này là thứ ba, ngày 0 tháng 11, 2011 7:00 AM nhưng iam nhận được thứ hai, ngày 31 tháng 10 , 2011 7: 00, PM bằng cách sử dụng mã trên. – androiduser

+0

Tôi hiểu rằng có sự khác biệt múi giờ, nhưng 12 giờ? – BalusC

2
int seconds = 1320105600; 
Date date = new Date(seconds * 1000); 
SimpleDateFormat sdf = new SimpleDateFormat("EEEE,MMMM d,yyyy h:mm,a"); 
System.out.println(sdf.format(date)); 
2

java.time

Các Answer by BalusC là tốt ở chỗ nó chỉ bạn sử dụng java.time. Nhưng Câu trả lời đó sử dụng LocalDateTime trong đó Instant phù hợp hơn. A LocalDateTimekhông phải một thời điểm trên dòng thời gian vì nó cố ý không có khái niệm về offset-from-UTC hoặc time zone.

java.time

Khung java.time được xây dựng vào Java 8 và sau đó. Các lớp này thay thế các lớp ngày giờ phiền hà cũ như java.util.Date, .Calendar, & java.text.SimpleDateFormat. Nhóm Joda-Time cũng khuyên di chuyển sang java.time.

Để tìm hiểu thêm, hãy xem Oracle Tutorial. Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích.

Phần lớn java.chức năng thời gian được chuyển sang Java 6 & 7 trong ThreeTen-Backport và tiếp tục được điều chỉnh cho Android theo số ThreeTenABP.

Instant

Một khoảnh khắc trên Timeline trong UTC với độ phân giải lên đến nanoseconds được đại diện bởi lớp Instant.

Instant instant = Instant.ofEpochSecond (1_320_105_600L); 

Dump to console. Giá trị đầu vào của bạn là thời điểm đầu tiên của ngày 1 tháng 11 năm 2011 tại UTC. Các Z cuối cùng, viết tắt của 'Zulu', có nghĩa là UTC.

System.out.println ("instant: " + instant); 

ngay lập tức: 2011-11-01T00: 00: 00Z

ZonedDateTime

Trong ý kiến ​​của bạn, bạn đề cập đến muốn thấy điều này ngày thời gian qua ống kính của thời America/Chicago vùng. Sử dụng proper time zone name. Áp dụng múi giờ, ZoneId để nhận đối tượng ZonedDateTime. Chúng ta thấy rằng Chicago là năm giờ sau UTC vào ngày đó.

ZoneId zoneId = ZoneId.of ("America/Chicago"); 
ZonedDateTime zdt = instant.atZone (zoneId); 

zdt: 2011-10-31T19: 00-05: 00 [Mỹ/Chicago]

Strings

Các Strings thấy ở trên là ở định dạng tiêu chuẩn ISO 8601. Để tạo chuỗi ở các định dạng khác, hãy sử dụng lớp DateTimeFormatter. Bạn có thể chỉ định mẫu tùy chỉnh của riêng mình. Nhưng nói chung là tốt nhất để cho java.time tự động bản địa hóa các ngôn ngữ và các chỉ tiêu văn hóa của con người được mã hóa trong một đối tượng Locale.

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime (FormatStyle.FULL); 
formatter = formatter.withLocale (Locale.US); 
String output = zdt.format (formatter); 

thứ Hai 31 tháng 10, 2011 07:00:00 CDT

Để xác định định dạng tùy chỉnh của riêng bạn, tìm Stack Overflow cho nhiều ví dụ và thảo luận nhiều hơn nữa.

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