2014-09-29 22 views
8

Tôi nhận được ngày chuỗi từ một hệ thống khác và tôi biết ngôn ngữ của ngày đó (cũng có sẵn từ hệ thống khác). Tôi muốn chuyển đổi Chuỗi này thành đối tượng Joda-TimeDateTime mà không chỉ định rõ ràng mẫu đích.Định dạng Ngày giờ theo thời gian Joda dựa trên ngôn ngữ

Ví dụ: tôi muốn chuyển đổi chuỗi này "09/29/2014" thành đối tượng ngày chỉ sử dụng ngôn ngữ và không phải bằng cách mã hóa cứng định dạng ngày thành "mm/dd/yyyy". Tôi không thể mã cứng định dạng vì điều này sẽ khác nhau tùy thuộc vào địa phương của ngày tôi nhận được.

Trả lời

9
String localizedCalendarDate = DateTimeFormat.shortDate().print(new LocalDate(2014, 9, 29)); 
// uses in Germany: dd.MM.yyyy 
// but uses in US: MM/dd/yyyy 

LocalDate date = 
    DateTimeFormat.mediumDate().withLocale(Locale.US).parseLocalDate("09/29/2014"); 
DateTime dt = date.toDateTimeAtStartOfDay(DateTimeZone.forID("America/Los_Angeles")); 

Như bạn thấy, bạn cũng sẽ cần phải biết thời gian đồng hồ (= bắt đầu ngày trong ví dụ) và múi giờ (US-California trong ví dụ) để chuyển đổi một ngày phân tích cú pháp để một dấu thời gian toàn cầu như DateTime.

+1

FYI, một cú pháp thay thế đang gọi ['DateTimeFormat.forStyle()'] (http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html#forStyle (java.lang.String)) và truyền một cặp ký tự. Chuyển một ký tự cho phần ngày tháng và một ký tự khác cho phần thời gian. Chỉ định ký tự 'S' cho kiểu ngắn, 'M' cho phương tiện, 'L' cho dài và 'F' cho đầy đủ. Có thể bỏ qua ngày hoặc giờ bằng cách chỉ định ký tự kiểu '-'. –

+0

@BasilBourque Cảm ơn lời bình luận tốt của bạn. –

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