2011-02-20 45 views
22

Tôi mới dùng cả phát triển Java và Android nên đây có thể là một câu hỏi ngu ngốc, nhưng tôi đã tìm kiếm hàng ngày và không thể tìm thấy giải pháp:Định dạng ngày và giờ tùy thuộc vào ngôn ngữ

I cố gắng xuất ra một java.util.Date tùy thuộc vào ngôn ngữ của người dùng.

Tìm kiếm trên StackOverflow dẫn tôi như thế này:

java.util.Date date = new Date(); 
String dateString = DateFormat.getDateFormat(getApplicationContext()).format(date); 

đầu ra này:

20/02/2011 

Trên điện thoại cục bộ tiếng Pháp của tôi. Tốt thôi.

Làm cách nào tôi cũng có thể xuất các phần giờ, phút và giây của Date, sử dụng ngôn ngữ của người dùng? Tôi đã tìm trong tài liệu android nhưng không thể tìm thấy gì cả.

Rất cám ơn.

Trả lời

-3

Nếu bạn muốn những giờ giây và giây milli của miền địa phương hiện tại sau đó sử dụng Calendar.getInstance() getTime() sẽ cung cấp cho bạn thời gian của miền địa phương hiện tại

+1

Điều này trả về một đối tượng 'Ngày', và câu hỏi này là định dạng nó thành một chuỗi. – poolie

3
.

DateFormat.getTimeInstance() có trình định dạng thời gian với kiểu định dạng mặc định cho ngôn ngữ mặc định. Bạn cũng có thể chuyển một kiểu và Locale.

1
public static String formatDate(Date date, boolean withTime) 
{ 
    String result = ""; 
    DateFormat dateFormat; 

    if (date != null) 
    { 
     try 
     { 
      String format = Settings.System.getString(context.getContentResolver(), Settings.System.DATE_FORMAT); 
      if (TextUtils.isEmpty(format)) 
      { 
       dateFormat = android.text.format.DateFormat.getDateFormat(context); 
      } 
      else 
      { 
       dateFormat = new SimpleDateFormat(format); 
      } 
      result = dateFormat.format(date); 

      if (withTime) 
      { 
       dateFormat = android.text.format.DateFormat.getTimeFormat(context); 
       result += " " + dateFormat.format(date); 
      } 
     } 
     catch (Exception e) 
     { 
     } 
    } 

    return result; 
} 
+5

Có vẻ ok, nhưng bạn không nên coi thường trường hợp ngoại lệ như thế. – JoshDM

4

java.text.DateFormat có tất cả các chức năng bạn có thể cần:

DateFormat.getDateInstance()

DateFormat.getTimeInstance()

Nhưng một trong những gì bạn cần là:

DateFormat.getDateTimeInstance() Bạn cũng có thể xác định độ dài của phần ngày/giờ và ngôn ngữ. Kết quả cuối cùng sẽ là:

DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT, Locale.FRENCH).format(Date);

Nguồn: http://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html

7

tl; dr

ZonedDateTime.now(ZoneId.of("Asia/Kolkata")) 
      .format(DateTimeFormatter.ofLocalizedDateTime (FormatStyle.FULL).withLocale (Locale.FRENCH)) 

java.time

các mã trong câu hỏi sử dụng rắc rối cũ ngày thời gian các lớp, giờ được thừa kế, được thay thế bởi các lớp java.time được xây dựng trong Java 8 trở lên.

Khu vực địa lý và múi giờ không liên quan gì đến nhau. Miền địa phương xác định các tiêu chuẩn ngôn ngữ và văn hóa của con người được sử dụng khi tạo một Chuỗi để biểu thị một giá trị ngày giờ. Múi giờ xác định wall-clock time của một vùng cụ thể được sử dụng để đại diện cho một thời điểm trên dòng thời gian.

Lớp Instant đại diện cho một thời điểm trên dòng thời gian ở UTC với độ phân giải nanoseconds (tối đa chín (9) chữ số thập phân).

Instant instant = Instant.now(); 

2016-10-12T07: 21: 00.264Z

Áp dụng một múi giờ để có được một ZonedDateTime. Tôi tự ý chọn hiển thị khoảnh khắc này bằng múi giờ Ấn Độ. Cùng một thời điểm, cùng một điểm trên dòng thời gian.

ZoneId z = ZoneId.of("Asia/Kolkata"); 
ZonedDateTime zdt = instant.atZone(z); 

2016-10-12T12: 51: 00.264 + 05: 30 [Asia/Kolkata]

Tạo một String bằng cách sử dụng địa phương của Québec Canada. Hãy để java.time tự động bản địa hóa chuỗi.

Locale l = Locale.CANADA_FRENCH; 
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime (FormatStyle.FULL).withLocale (l); 
String output = zdt.format (f); // Indian time zone with Québécois presentation/translation. 

mercredi 12 Octobre 2016 12 h 51 IST


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, & java.text.SimpleDateFormat.

Dự án Joda-Time, hiện đang ở maintenance mode, khuyên di chuyển sang 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?

  • Java SE 8SE 9 và sau
    • Built-in.
    • Một phần của API Java chuẩn với gói được triển khai.
    • Java 9 thêm một số tính năng và bản sửa lỗi nhỏ.
  • Java SE 6SE 7
    • Hầu hết các chức năng java.time được back-chuyển đến Java 6 & 7 trong ThreeTen-Backport.
  • Android

Dự án mở rộng ThreeTen-Extra 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 những bổ sung có thể có trong tương lai vào java.time. Bạn có thể tìm thấy một số lớp học hữu ích tại đây như Interval, YearWeek, YearQuartermore.

+0

"Bạn đang sử dụng các lớp học hẹn giờ cũ rắc rối" Thật công bằng, tôi đã đặt câu hỏi vào năm 2011. Cảm ơn bạn đã theo dõi. Bạn có thể muốn chỉnh sửa câu trả lời để làm rõ rằng mọi thứ đã thay đổi ngày nay. Như nó đứng nó đọc như thể sử dụng những lớp học là điều sai trái để làm lại sau đó có thể gây nhầm lẫn cho mọi người. – ereOn

+1

Cảm ơn bạn đã phản hồi tốt bằng văn bản và kết luận này. – Hank

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