Android: làm cách nào để lấy ngày hiện tại trong tuần (Thứ Hai, v.v.) bằng ngôn ngữ của người dùng?


80

Tôi muốn biết ngày hiện tại trong tuần (Thứ Hai, Thứ Ba ...) bằng ngôn ngữ địa phương của người dùng. Ví dụ: "Lundi" "Mardi", v.v ... nếu người dùng là người Pháp.

Tôi đã đọc bài đăng này, nhưng nó chỉ trả về một số nguyên, không phải một chuỗi với ngày trong ngôn ngữ của người dùng: Cách dễ nhất để lấy ngày hiện tại trong tuần trong Android là gì?

Nói một cách tổng quát hơn, làm cách nào để viết tất cả các ngày trong tuần và tất cả các tháng trong năm bằng ngôn ngữ của người dùng?

Tôi nghĩ rằng điều này là có thể, chẳng hạn như chương trình của Google cung cấp các ngày và tháng được viết bằng ngôn ngữ địa phương của người dùng.

Cảm ơn !!

Câu trả lời:


168

Sử dụng SimpleDateFormat để định dạng ngày và giờ thành một chuỗi mà con người có thể đọc được, đối với ngôn ngữ của người dùng.

Ví dụ nhỏ để lấy ngày hiện tại trong tuần (ví dụ: "Thứ Hai") :

SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);

31

Thử cái này:

int dayOfWeek = date.get(Calendar.DAY_OF_WEEK);  
String weekday = new DateFormatSymbols().getShortWeekdays()[dayOfWeek];

HI, nếu bạn sử dụng shortweekdays nó chỉ hiển thị một letter.but tôi cần phải hiển thị đầu tiên 3 chữ cái trong ngày
Sankar muniyappa

Lưu ý rằng để có quyền truy cập vào tất cả các ngôn ngữ có sẵn, người ta nên sử dụng DateFormatSymbols.getInstance()(mặc dù hiện tại nó có thể cho kết quả tương tự).
user905686

20

Tôi biết đã được trả lời nhưng ai đang tìm kiếm 'Thứ sáu' như thế này

cho Thứ Sáu -

SimpleDateFormat sdf = new SimpleDateFormat("EEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);

và ai muốn chuỗi ngày đầy đủ, họ có thể sử dụng 4E cho Thứ Sáu

Cho thứ sáu-

SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);

Thưởng thức...


Tôi nhận được lỗi trên dòng thứ 2 của bạn nói rằng ngày khởi tạo là không xác định.

17

Để làm cho mọi thứ ngắn hơn Bạn có thể sử dụng cái này:

android.text.format.DateFormat.format("EEEE", date);

sẽ trả về ngày trong tuần dưới dạng Chuỗi.


11

Đây là những gì tôi đã sử dụng để lấy tên ngày ( 0-6có nghĩa là monday - sunday):

public static String getFullDayName(int day) {
    Calendar c = Calendar.getInstance();
    // date doesn't matter - it has to be a Monday
    // I new that first August 2011 is one ;-)
    c.set(2011, 7, 1, 0, 0, 0);
    c.add(Calendar.DAY_OF_MONTH, day);
    return String.format("%tA", c);
}

public static String getShortDayName(int day) {
    Calendar c = Calendar.getInstance();
    c.set(2011, 7, 1, 0, 0, 0);
    c.add(Calendar.DAY_OF_MONTH, day);
    return String.format("%ta", c);
}

6

tl; dr

String output = 
    LocalDate.now( ZoneId.of( "America/Montreal" ) )
             .getDayOfWeek()
             .getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;

java.time

Các lớp java.time được tích hợp trong Java 8 trở lên và được chuyển ngược sang Java 6 & 7Android bao gồm DayOfWeekenum tiện dụng .

Các ngày được đánh số theo định nghĩa tiêu chuẩn ISO 8601, 1-7 cho Thứ Hai-Chủ Nhật.

DayOfWeek dow = DayOfWeek.of( 1 );

Enum này bao gồm getDisplayNamephương thức tạo một Chuỗi của tên đã dịch được bản địa hóa trong ngày.

Đối Localetượng chỉ định ngôn ngữ con người được sử dụng trong bản dịch và chỉ định các chuẩn mực văn hóa để quyết định các vấn đề như viết hoa và dấu câu.

String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;

Để có được ngày hôm nay, hãy sử dụng LocalDatelớp học. Lưu ý rằng múi giờ rất quan trọng vì đối với bất kỳ thời điểm cụ thể nào, ngày thay đổi trên toàn cầu.

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
DayOfWeek dow = today.getDayOfWeek();
String output = dow.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;

Hãy nhớ rằng ngôn ngữ không liên quan gì đến múi giờ. Hai vấn đề trực giao riêng biệt. Bạn có thể muốn một bản trình bày bằng tiếng Pháp về ngày giờ được khoanh vùng ở Ấn Độ ( Asia/Kolkata).

Joda-Time

CẬP NHẬT: Dự án Joda-Time , hiện đang ở chế độ bảo trì , khuyên bạn nên chuyển sang các lớp java.time .

Các Joda thời gian thư viện cung cấp Localenội địa hóa tạo đà của các giá trị ngày thời gian.

DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zone );

Locale locale = Locale.CANADA_FRENCH;
DateTimeFormatter formatterUnJourQuébécois = DateTimeFormat.forPattern( "EEEE" ).withLocale( locale );

String output = formatterUnJourQuébécois.print( now );

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

đầu ra: samedi


Giới thiệu về java.time

Khung java.time được tích hợp sẵn trong Java 8 trở lên. 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, hãy xem Hướng dẫn Oracle . Và tìm kiếm Stack Overflow để có nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310 .

Lấy các lớp java.time ở đâu?

  • Java SE 8 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 một triển khai đóng gói.
    • Java 9 bổ sung một số tính năng nhỏ và các bản sửa lỗi.
  • Java SE 6 SE 7
    • Phần lớn chức năng của java.time được chuyển ngược sang Java 6 & 7 trong ThreeTen-Backport .
  • Android

5

Thử cái này...

//global declaration
private TextView timeUpdate;
Calendar calendar;

.......

timeUpdate = (TextView) findViewById(R.id.timeUpdate); //initialize in onCreate()

.......

//in onStart()
calendar = Calendar.getInstance();
//date format is:  "Date-Month-Year Hour:Minutes am/pm"
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy HH:mm a"); //Date and time
String currentDate = sdf.format(calendar.getTime());

//Day of Name in full form like,"Saturday", or if you need the first three characters you have to put "EEE" in the date format and your result will be "Sat".
SimpleDateFormat sdf_ = new SimpleDateFormat("EEEE"); 
Date date = new Date();
String dayName = sdf_.format(date);
timeUpdate.setText("" + dayName + " " + currentDate + "");

Kết quả là... nhập mô tả hình ảnh ở đây

viết mã vui vẻ .....


4

Xin lỗi vì trả lời muộn, nhưng điều này sẽ hoạt động bình thường.

daytext=(textview)findviewById(R.id.day);

Calender c=Calender.getInstance();
SimpleDateFormat sd=new SimpleDateFormat("EEEE");
String dayofweek=sd.format(c.getTime());


daytext.setText(dayofweek);

2
(1) Giải pháp này đã được đề cập trong Câu trả lời được chấp nhận . Giải thích cách của bạn thêm giá trị hoặc xóa. (2) Các lớp này hiện là kế thừa, được thay thế bởi các lớp java.time.
Basil Bourque vào

1

Tôi chỉ sử dụng giải pháp này trong Kotlin:

 var date : String = DateFormat.format("EEEE dd-MMM-yyyy HH:mm a" , Date()) as String


0
//selected date from calender
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy"); //Date and time
String currentDate = sdf.format(myCalendar.getTime());

//selcted_day name
SimpleDateFormat sdf_ = new SimpleDateFormat("EEEE");
String dayofweek=sdf_.format(myCalendar.getTime());
current_date.setText(currentDate);
lbl_current_date.setText(dayofweek);

Log.e("dayname", dayofweek);

1
Không thể đọc được. Và bạn đang sử dụng các lớp được thiết kế kém và đã lỗi thời từ lâu SimpleDateFormat, DateCalendar(cũng được sử dụng trong câu hỏi).
Ole VV,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.