Tôi đang cung cấp câu trả lời hiện đại.
java.time và ThreeTenABP
Để có được ngày hiện tại:
LocalDate today = LocalDate.now(ZoneId.of("America/Hermosillo"));
Điều này cung cấp cho bạn một LocalDate
đối tượng, đó là những gì bạn nên sử dụng để giữ một ngày trong chương trình của bạn. A LocalDate
là một ngày không có thời gian trong ngày.
Chỉ khi bạn cần hiển thị ngày cho người dùng, hãy định dạng nó thành một chuỗi phù hợp với ngôn ngữ của người dùng:
DateTimeFormatter userFormatter
= DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
System.out.println(today.format(userFormatter));
Khi tôi chạy đoạn trích này ngày hôm nay bằng ngôn ngữ tiếng Anh Mỹ, đầu ra là:
Ngày 13 tháng 7 năm 2019
Nếu bạn muốn nó ngắn hơn, chỉ định FormatStyle.MEDIUM
hoặc thậm chí FormatStyle.SHORT
. DateTimeFormatter.ofLocalizedDate
sử dụng ngôn ngữ định dạng mặc định, vì vậy vấn đề là nó sẽ cho đầu ra phù hợp với miền địa phương đó, khác nhau cho các địa phương khác nhau.
Nếu người dùng của bạn có các yêu cầu rất đặc biệt đối với định dạng đầu ra, hãy sử dụng chuỗi mẫu định dạng:
DateTimeFormatter userFormatter = DateTimeFormatter.ofPattern(
"d-MMM-u", Locale.forLanguageTag("ar-AE"));
13-يول -2019
Tôi đang sử dụng và giới thiệu java.time, API ngày và giờ Java hiện đại. DateFormat
, SimpleDateFormat
, Date
Và Calendar
sử dụng trong câu hỏi và / hoặc nhiều câu trả lời khác, được thiết kế kém và lâu lỗi thời. Và java.time đẹp hơn rất nhiều để làm việc với.
Câu hỏi: Tôi có thể sử dụng java.time trên Android không?
Có, java.time hoạt động độc đáo trên các thiết bị Android cũ hơn và mới hơn. Nó chỉ cần ít nhất Java 6 .
- Trong Java 8 trở lên và trên các thiết bị Android mới hơn (từ API cấp 26), API hiện đại được tích hợp sẵn.
- Trong Java 6 và 7, lấy ThreeTen Backport, backport của các lớp hiện đại (ThreeTen cho JSR 310; xem các liên kết ở phía dưới).
- Trên (cũ) Android sử dụng phiên bản Android của ThreeTen Backport. Nó được gọi là ThreeTenABP. Và hãy chắc chắn rằng bạn nhập các lớp ngày và thời gian từ
org.threeten.bp
với các gói con.
Liên kết
DateFormat
lớp này vẫn ổn khi câu hỏi này được hỏi vào năm 2011, nhưng lớp đó và lớp con của nóSimpleDateFormat
luôn gây rắc rối và giờ đã lỗi thời. Tôi khuyên bạn không nên sử dụng chúng và thay vào đó hãy tìm hiểu về java.time, API ngày và giờ Java hiện đại .