2013-01-04 49 views
7

Tôi cần phải định dạng ngày thành một chuỗi cụ thể.Ngày định dạng Android với múi giờ

tôi đã sử dụng SimpleDateFormat lớp để định dạng ngày bằng cách sử dụng mô hình "yyyy-MM-dd'T'HH:mm:ssZ" nó trả về ngày hiện tại như
"2013-01-04T15:51:45+0530" nhưng tôi cần như
"2013-01-04T15:51:45+05:30".

Dưới đây là các mã hóa được sử dụng,

Calendar c = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH);  
Log.e(C.TAG, "formatted string: "+sdf.format(c.getTime())); 

Output: định dạng chuỗi: 2013-01-04T15:51:45+0530

Tôi cần định dạng như 2013-01-04T15:51:45+05:30 chỉ cần thêm ruột kết trong giữa thời gian gmt.

Vì tôi đang làm việc trên lịch Google để chèn sự kiện, nó chỉ chấp nhận định dạng bắt buộc mà tôi đã đề cập.

+0

Tôi không nghĩ rằng bạn có thể với một định dạng đơn giản. Vì vậy, bạn sẽ cần phải chèn ':' theo cách thủ công. [Java 7 đã giới thiệu điểm đánh dấu 'X'] (http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) có nhiều tùy chọn định dạng hơn 'Z' nhưng không có sẵn trên android (chưa?). – assylias

+0

Nếu định dạng thủ công là nhiệm vụ cần thực hiện (trong tham chiếu đến chú thích ở trên), bạn có thể tìm kiếm '+' cuối cùng và sau đó thêm một ':' sau 2 chỉ mục. –

+0

@KazekageGaara Nó cũng có thể là một '-' ... – assylias

Trả lời

9

Thay vào đó, bạn có thể sử dụng Joda Time. Số DateTimeFormat của nó có thuộc tính định dạng ZZ làm những gì bạn muốn.

Link

Big lợi thế: không giống như SimpleDateFormat, DateTimeFormatter là chủ đề an toàn. Cách sử dụng:

DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZZ") 
    .withLocale(Locale.ENGLISH); 
+0

Tôi tìm thấy một cách hơi khác để thực hiện việc này, với: DateTime my_date = new DateTime(); ... Thiết lập ngày đến một cái gì đó my_date = ... Sau đó, định dạng nó với:. ToString Chuỗi curr_date = my_date.toLocalDate() ("yyyy-MM-dd"); – Brandon

+0

bạn đã thử 'yyyy-MM-dd'T'HH: mm: ssXXX' –

+0

@fge" ZZ "đã giải quyết cho tôi chưa. Cảm ơn! ;) –

1

Điều bạn có thể làm chỉ cần thêm ":" theo cách thủ công bằng chuỗi con(). Tôi đã phải đối mặt với điều này trước đó và giải pháp này hoạt động.

1

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

Calendar c = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ENGLISH); 

System.out.println("formatted string: "+sdf.format(c.getTime())); 

String text = sdf.format(c.getTime()); 
String result = text.substring(0, 22) + ":" + text.substring(22); 
System.out.println("result = " + result); 
1

Tại sao không chỉ làm điều đó bằng tay với regexp?

String oldDate = "2013-01-04T15:51:45+0530"; 
String newDate = oldDate.replaceAll("(\\+\\d\\d)(\\d\\d)", "$1:$2"); 

Kết quả tương tự, với chuỗi con (nếu hiệu suất là một vấn đề).

String oldDate = "2013-01-04T15:51:45+0530"; 
int length = oldDate.length(); 
String newDate = oldDate.substring(0, length - 2) + ':' + oldDate.substring(length - 2); 
0

Hãy thử mã này

Calendar c = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z", Locale.ENGLISH); 
String s = sdf.format(c.getTime()); 
String fDate = s.substring(0, s.length()-2) +":"+s.substring(s.length()-2, s.length()); 
Log.e("check", "formatted string: "+fDate); 
24

Bạn cũng có thể sử dụng "zzzzz" thay vì "Z" trong mô hình của bạn (theo documentation). Một cái gì đó như thế này

Calendar c = Calendar.getInstance(); 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ", Locale.ENGLISH);  
    Log.e(C.TAG, "formatted string: "+sdf.format(c.getTime())); 
+1

Đây là câu trả lời đúng, @fargath bạn nên đánh dấu nó lên. – VAdaihiep

+0

Đây phải là câu trả lời đúng. Tôi thấy nó vô lý khi mọi người đề cập đến các thư viện như một giải pháp chính thay vì nó là một gợi ý thứ cấp. Nó giống như xén vải bằng một thanh kiếm. – humblerookie

+0

Tài liệu nói rằng nó hỗ trợ X. – rozina

0

Đơn giản chỉ cần cấu trúc lại mã này và thay thế 'Locale.getDefault()' với Locale bạn cần

private SimpleDateFormat getDateFormat() { 
    SimpleDateFormat dateFormat = (SimpleDateFormat) SimpleDateFormat.getDateTimeInstance(SimpleDateFormat.SHORT, SimpleDateFormat.DEFAULT, Locale.getDefault()); 
    String pattern = dateFormat.toLocalizedPattern(); 
    pattern = pattern.trim(); 
    dateFormat.applyLocalizedPattern(pattern); 
    return dateFormat; 
} 

// Và đây là việc sử dụng

SimpleDateFormat sdf = getDateFormat();

sdf.format (new Date());

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