2011-10-04 34 views
55

Tôi muốn biết ngày hiện tại của tuần là gì (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à tiếng Pháp.Android: làm thế nào để có được ngày hiện tại trong tuần (thứ hai, vv ...) bằng ngôn ngữ của người dùng?

Tôi đã đọc bài viết này, nhưng nó chỉ trả về một int, không phải là một chuỗi với ngày trong ngôn ngữ của người dùng: What is the easiest way to get the current day of the week in Android?

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

Tôi nghĩ rằng điều này là có thể, ví dụ như chương trình làm việc của Google cung cấp 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 !!

Trả lời

116

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

ví dụ nhỏ để có được ngày hiện tại trong tuần (ví dụ: "Monday"):

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

Từ SimpleDateFormat documentation: _Đối với định dạng, nếu số mẫu có từ 4 trở lên, sử dụng biểu mẫu đầy đủ; nếu không, một dạng viết tắt hoặc viết tắt được sử dụng nếu có _.... Điều đó có nghĩa là khi tôi sử dụng mã này, tôi đã nhận ** Mon ** thay vì ** Monday **. Nếu bạn muốn sử dụng đầy đủ hình thức "EEEE" [link] (http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html) – xtem

+0

Cảm ơn .. Tôi có điểm này. .. :) –

11

Hers là những gì tôi sử dụng để có được những tên tuổi ngày (0-6 nghĩa 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); 
} 
14

Để làm cho mọi việc ngắn hơn Bạn có thể sử dụng điều này:

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

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

4

Hãy thử 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à ... enter image description here

hạnh phúc mã hóa .....

17

Hãy thử điều này:

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

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

cho Fri -

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

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

Đối Friday-

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

Thưởng thức .. .

+0

Tôi nhận được một lỗi trên dòng thứ 2 của bạn nói constructor Date là không xác định. –

1

tl; dr

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

java.time

Các java.các lớp thời gian được xây dựng trong Java 8 trở lên và back-ported to Java 6 & 7to Android bao gồm tiện ích DayOfWeek enum.

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

DayOfWeek dow = DayOfWeek.of(1); 

Phương pháp này bao gồm phương thức getDisplayName để tạo chuỗi tên được dịch địa phương trong ngày.

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

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

Để có ngày hôm nay, hãy sử dụng lớp học LocalDate. Lưu ý rằng múi giờ rất quan trọng đố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 có liên quan gì đến múi giờ. Bạn có thể muốn một bản trình bày tiếng Pháp của một quy hoạch ngày giờ ở Ấn Độ (Asia/Kolkata).

Joda thời gian

UPDATE: Dự án Joda-Time, bây giờ trong maintenance mode, khuyên chuyển đổi sang các java.time lớp.

Thư viện Joda-Time cung cấp Locale - nội địa hoá các giá trị ngày giờ.

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


Về java.time

Khung java.time được xây dựng vào Java 8 và sau đó. Các lớp này thay thế các lớp học ngày giờ legacy phiền hà cũ như java.util.Date, Calendar, & SimpleDateFormat.

Dự án Joda-Time, hiện đang ở maintenance mode, khuyên di chuyển đến các lớp java.time.

Để tìm hiểu thêm, hãy xem Oracle Tutorial. 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 lấy các lớp java.time?

1

Xin lỗi vì trả lời muộn.Đ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); 
+0

(1) Giải pháp này đã được đề cập trong [Câu trả lời được chấp nhận] (http://stackoverflow.com/a/7651306/642706). Giải thích cách bạn thêm giá trị hoặc xóa thêm. (2) Các lớp này hiện là di sản, được thay thế bởi các lớp java.time. –

Các vấn đề liên quan