Định dạng của bạn, YYYY-mm-dd'T'HH:MM:ss'Z'
không đúng. Hãy thảo luận về mọi thứ sai với định dạng này.
- Bạn đã sử dụng
Y
thay vìy
: Ký hiệuY
được sử dụng choWeek year
trong khiy
được sử dụng choYear
. Kiểm tra Sự khác biệt giữa năm- thời đại và theo tuần theo năm? để tìm hiểu thêm về nó. - Bạn đã sử dụng
mm
trong tháng: Ký hiệu chính xác của tháng làM
. - Bạn đã sử dụng
MM
trong vài phút: Ký hiệu chính xác cho phút làm
. - Bạn có
Z
kèm theo trong các dấu ngoặc kép: Ký hiệu,Z
được sử dụng choTime zone
trong khi'Z'
không là gì ngoài một ký tự theo nghĩa đen. Có thể bạn muốn định dạng độ lệch múi giờ của+00:00
dưới dạngZ
và đối với điều này, trên thực tế, bạn nên sử dụngX
.
Vì vậy, định dạng đúng như sau:
yyyy-MM-dd'T'HH:mm:ssX
Bản trình diễn với định dạng được đề xuất:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.ENGLISH);
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
System.out.println(sdf.format(date));
}
}
Đầu ra:
2021-01-14T08:13:01Z
Lưu ý rằng API ngày-giờ của java.util
và API định dạng của chúng, SimpleDateFormat
đã lỗi thời và dễ xảy ra lỗi. Bạn nên ngừng sử dụng chúng hoàn toàn và chuyển sang API ngày-giờ hiện đại
.
- Vì bất kỳ lý do gì, nếu bạn phải sử dụng Java 6 hoặc Java 7, bạn có thể sử dụng ThreeTen-Backport cái nào hỗ trợ hầu hết java.time chức năng cho Java 6 &7.
- Nếu bạn đang làm việc cho một dự án Android và cấp API Android của bạn vẫn không tuân thủ Java-8, hãy kiểm tra Các API Java 8+ khả dụng thông qua quá trình gỡ lỗi và Cách sử dụng ThreeTenABP trong Android Project .
Sử dụng Date#toInstant
để chuyển đổi java.util.Date
đối tượng (kiểu kế thừa) thành java.time.Instant
(loại hiện đại). Instant
đại diện cho một điểm tức thời trên dòng thời gian và phải vừa đủ cho hầu hết các hoạt động JSON của bạn. Instant#toString
trả về chuỗi ngày-giờ với độ lệch múi giờ UTC tuân thủ tiêu chuẩn ISO-8601
.
Bản trình diễn:
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
Instant instant = date.toInstant();
// Print the value of instant#toString
System.out.println(instant);
OffsetDateTime odt = instant.atOffset(ZoneOffset.UTC);
System.out.println(odt);
// Custom format
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX", Locale.ENGLISH);
System.out.println(dtf.format(odt));
}
}
Đầu ra:
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35Z