tl; dr
Sử dụng java.time ...
LocalDate.parse( // Generate `LocalDate` object from String input.
"23/2/2010" ,
DateTimeFormatter.ofPattern( "d/M/uuuu" )
)
.getDayOfWeek() // Get `DayOfWeek` enum object.
.getDisplayName( // Localize. Generate a String to represent this day-of-week.
TextStyle.SHORT_STANDALONE , // How long or abbreviated. Some languages have an alternate spelling for "standalone" use (not so in English).
Locale.US // Or Locale.CANADA_FRENCH and such. Specify a `Locale` to determine (1) human language for translation, and (2) cultural norms for abbreviation, punctuation, etc.
)
Thứ ba
Xem mã này chạy trực tiếp tại IdeOne.com (nhưng chỉ Locale.US
hoạt động ở đó).
java.time
Xem mã ví dụ của tôi ở trên và xem Câu trả lời đúng cho java.time của Przemek .
Số thường
Nếu chỉ cần ngày thứ tự là mong muốn, làm thế nào có thể được lấy ra?
Đối với số thứ tự, hãy xem xét chuyển xung quanh DayOfWeek
đối tượng enum thay vì DayOfWeek.TUESDAY
. Hãy nhớ rằng a DayOfWeek
là một đối tượng thông minh, không chỉ là một chuỗi hoặc số nguyên. Việc sử dụng các đối tượng enum đó làm cho mã của bạn có nhiều tài liệu hơn, đảm bảo các giá trị hợp lệ và cung cấp loại an toàn .
Nhưng nếu bạn nhấn mạnh, yêu cầu DayOfWeek
một số . Bạn nhận được 1-7 cho Thứ Hai-Chủ Nhật theo tiêu chuẩn ISO 8601 .
int ordinal = myLocalDate.getDayOfWeek().getValue() ;
Joda-Thời gian
CẬP NHẬT: Dự án Joda-Time hiện đang ở chế độ bảo trì. Nhóm tư vấn di chuyển đến các lớp java.time. Khung công tác java.time được tích hợp vào Java 8 (cũng như được chuyển ngược lại sang Java 6 & 7 và tiếp tục thích nghi với Android ).
Dưới đây là mã ví dụ sử dụng thư viện Joda-Time phiên bản 2.4, như được đề cập trong câu trả lời được chấp nhận bởi Bozho . Joda-Time vượt trội hơn nhiều so với các lớp java.util.Date/.CalWiki được gói cùng với Java.
LocalDate
Joda-Time cung cấp LocalDate
lớp để đại diện cho một ngày mà không có bất kỳ thời gian trong ngày hoặc múi giờ. Chỉ những gì câu hỏi này yêu cầu. Các lớp java.util.Date/.CalWiki cũ đi kèm với Java thiếu khái niệm này.
Phân tích
Phân tích chuỗi thành một giá trị ngày.
String input = "23/2/2010";
DateTimeFormatter formatter = DateTimeFormat.forPattern( "d/M/yyyy" );
LocalDate localDate = formatter.parseLocalDate( input );
Trích xuất
Trích xuất từ giá trị ngày ngày số tuần và tên.
int dayOfWeek = localDate.getDayOfWeek(); // Follows ISO 8601 standard, where Monday = 1, Sunday = 7.
Locale locale = Locale.US; // Locale specifies the human language to use in determining day-of-week name (Tuesday in English versus Mardi in French).
DateTimeFormatter formatterOutput = DateTimeFormat.forPattern( "E" ).withLocale( locale );
String output = formatterOutput.print( localDate ); // 'E' is code for abbreviation of day-of-week name. See Joda-Time doc.
String outputQuébécois = formatterOutput.withLocale( Locale.CANADA_FRENCH ).print( localDate );
Đổ
Đổ vào bàn điều khiển.
System.out.println( "input: " + input );
System.out.println( "localDate: " + localDate ); // Defaults to ISO 8601 formatted strings.
System.out.println( "dayOfWeek: " + dayOfWeek );
System.out.println( "output: " + output );
System.out.println( "outputQuébécois: " + outputQuébécois );
Chạy
Khi chạy.
input: 23/2/2010
localDate: 2010-02-23
dayOfWeek: 2
output: Tue
outputQuébécois: mar.
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 các java.time lớp.
Để 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?
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 .