tl; dr
Cách tiếp cận hiện đại sử dụng các lớp java.time .
YearMonth.from(
ZonedDateTime.parse(
"Mon Mar 14 16:02:37 GMT 2011" ,
DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" )
)
).toString()
2011/03
Tránh các lớp học thời gian kế thừa
Cách hiện đại là với các lớp java.time. Các lớp thời gian cũ như Calendar
đã được chứng minh là được thiết kế kém, khó hiểu và rắc rối.
Xác định một trình định dạng tùy chỉnh để khớp với đầu vào chuỗi của bạn.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
Phân tích như một ZonedDateTime
.
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
Bạn quan tâm đến năm và tháng. Các lớp java.time bao gồm YearMonth
lớp cho mục đích đó.
YearMonth ym = YearMonth.from( zdt );
Bạn có thể thẩm vấn số năm và tháng nếu cần.
int year = ym.getYear();
int month = ym.getMonthValue();
Nhưng toString
phương thức tạo ra một chuỗi ở định dạng ISO 8601 tiêu chuẩn .
String output = ym.toString();
Đặt tất cả những thứ này lại với nhau.
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
YearMonth ym = YearMonth.from( zdt );
int year = ym.getYear();
int month = ym.getMonthValue();
Đổ vào bàn điều khiển.
System.out.println( "input: " + input );
System.out.println( "zdt: " + zdt );
System.out.println( "ym: " + ym );
đầu vào: Mon Mar 14 16:02:37 GMT 2011
zdt: 2011 / 03-14T16: 02: 37Z [GMT]
ym: 2011/03
Mã sống
Xem mã này đang chạy trong IdeOne.com .
Chuyển đổi
Nếu bạn phải có một Calendar
đối tượng, bạn có thể chuyển đổi sang GregorianCalendar
sử dụng các phương thức mới được thêm vào các lớp cũ.
GregorianCalendar gc = GregorianCalendar.from( zdt );
Giới thiệu về java.time
các java.time khung được xây dựng vào Java 8 và sau đó. Những lớp học thay thế cái cũ phiền hà di sản lớp học ngày thời gian như java.util.Date
, Calendar
, & SimpleDateFormat
.
Các Joda thời gian dự án, bây giờ trong chế độ bảo trì , khuyên chuyển đổi sang java.time.
Để tìm hiểu thêm, xem Hướng dẫn Oracle . Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310 .
Nơi để có được các lớp java.time?
- Java SE 8 và SE 9 trở lên
- Được xây dựng trong.
- Một phần của API Java tiêu chuẩn với việc triển khai đi kèm.
- Java 9 thêm một số tính năng nhỏ và sửa lỗi.
- Java SE 6 và SE 7
- Phần lớn chức năng java.time được chuyển ngược lại sang Java 6 & 7 trong ThreeTen-Backport .
- Android
Các ThreeTen-Extra dự án mở rộng java.time với các lớp bổ sung. Dự án này là một nền tảng chứng minh cho các bổ sung có thể trong tương lai cho java.time. Bạn có thể tìm thấy một số các lớp học hữu ích ở đây chẳng hạn như Interval
, YearWeek
, YearQuarter
, và nhiều hơn nữa .