2012-05-27 51 views
23

Tôi chỉ muốn ngày để hiển thị lên như vậy:Định dạng một ngày lịch

Saturday, May 26, 2012 at 10:42 PM

Dưới đây là mã của tôi cho đến nay:

Calendar calendar = Calendar.getInstance(); 
String theDate = calendar.get(Calendar.MONTH) + " " + calendar.get(Calendar.DAY_OF_MONTH) + " " + calendar.get(Calendar.YEAR); 

lastclick.setText(getString(R.string.lastclick) + " " + theDate); 

Điều này cho thấy những con số của tháng, ngày, và năm, nhưng phải có cách tốt hơn để làm điều này? Không phải là có một số cách đơn giản để làm điều này như sử dụng chức năng date() của PHP?

+1

có. không hiểu tại sao điều này lại quá khó. – scarhand

Trả lời

14

Sử dụng bên dưới để định dạng ngày theo yêu cầu. Tham khảo này LINK

Calendar calendar = Calendar.getInstance(); 
lastclick.setText(getString(R.string.lastclick) + " " + String.format("%1$tA %1$tb %1$td %1$tY at %1$tI:%1$tM %1$Tp", calendar)); 

đâu% 1 $ tA cho staurday, % 1 $ tb cho tháng Năm,

và vân vân ...

+1

Tôi vô tình upvoted này, nhưng tôi dường như không thể loại bỏ upvote của tôi mà không downvoting, đó là không cần thiết. Cái này hoạt động, nhưng cái dưới đây đơn giản hơn và dễ đọc hơn nhiều. – craned

71
Calendar calendar = Calendar.getInstance(); 
SimpleDateFormat format = new SimpleDateFormat("EEEE, MMMM d, yyyy 'at' h:mm a"); 
System.out.println(format.format(calendar.getTime())); 

Chạy mã trên sẽ xuất hiện thời gian hiện tại (ví dụ: Saturday, May 26, 2012 at 11:03 PM).

Xem Android documentation for SimpleDateFormat để biết thêm thông tin.

Đặc tả định dạng của SimpleDateFormat là tương tự như của date chức năng của PHP:

echo date("l, M j, Y \a\\t g:i A"); 

Bạn nói đúng. So với mã Java, mã PHP ngắn gọn hơn nhiều.

+0

Mã của bạn tạo định dạng cụ thể mà người hỏi muốn, nhưng nếu tôi muốn định dạng được đặt theo cài đặt hệ thống của người dùng thì sao? Trên Windows, mã C# DateTime.ToLongDateString() tạo ra điều đó. Nếu tôi muốn đạt được điều tương tự trên Android thì sao? –

+1

Xem câu trả lời của tôi cho giải pháp bao gồm ngôn ngữ. – String

10

Đây thực sự là một vấn đề khá tế nhị để có được quyền , và tôi đã không thấy câu trả lời khác ở đây về SO giải quyết cả hai:

  • Múi giờ của Calendar (có nghĩa là nó có thể hiển thị một ngày khác cal)
  • của thiết bị Locale (mà ảnh hưởng đến "đúng" cách để định dạng các ngày)

Những câu trả lời trước cho câu hỏi này bỏ qua miền địa phương, và câu trả lời khác có liên quan đến chuyển đổi sang một Date bỏ qua các múi giờ. Vì vậy, đây là một hoàn thiện hơn, giải pháp chung:

Calendar cal = Calendar.getInstance(); // the value to be formatted 
java.text.DateFormat formatter = java.text.DateFormat.getDateInstance(
     java.text.DateFormat.LONG); // one of SHORT, MEDIUM, LONG, FULL, or DEFAULT 
formatter.setTimeZone(cal.getTimeZone()); 
String formatted = formatter.format(cal.getTime()); 

Lưu ý rằng bạn cần phải sử dụng java.text.DateFormat ở đây, không Android của riêng (gây nhầm lẫn với tên) android.text.format.DateFormat.

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