2010-04-29 39 views
28

tôi lưu trữ các ngày tháng trong một cơ sở dữ liệu SQLite ở định dạng này:Chuyển đổi String để java.util.Date

d-MMM-yyyy,HH:mm:ss aaa 

Khi tôi lấy ngày với định dạng mà tôi có được mọi điều tốt ngoại trừ tiếng đồng hồ. Giờ luôn là 00. Dưới đây là kết quả của tôi:

String date--->29-Apr-2010,13:00:14 PM 
After convrting Date--->1272479414000--Thu Apr 29 00:00:14 GMT+05:30 2010 

Đây là mã:

Date lScheduledDate = CalendarObj.getTime(); 
    DateFormat formatter = new SimpleDateFormat("d-MMM-yyyy,HH:mm:ss aaa"); 
    SomeClassObj.setTime(formatter.format(lScheduledDate)); 

    String lNextDate = SomeClassObj.getTime(); 
    DateFormat lFormatter = new SimpleDateFormat("d-MMM-yyyy,HH:mm:ss aaa"); 
    Date lNextDate = (Date)lFormatter.parse(lNextDate); 
    System.out.println("output here"+lNextDate); 

Tôi đang làm gì sai?

+0

hãy thêm mã bạn sử dụng để phân tích ngày –

+0

Tôi đã chỉ định mã số –

+3

Bạn bè đã giải quyết Vấn đề được giải quyết, vấn đề với AM/PM "letter aaa" ở định dạng, vì tôi đang sử dụng 'HH', 'aaa' nên không được sử dụng, nếu bạn sử dụng 'aaa' sau đó chỉ định 'hh' –

Trả lời

50

Tôi nghĩ rằng định dạng ngày của bạn không có ý nghĩa. Không có 13:00 PM. Loại bỏ "aaa" ở cuối định dạng của bạn hoặc biến HH thành hh.

Tuy nhiên, điều này hoạt động tốt đối với tôi:

String testDate = "29-Apr-2010,13:00:14 PM"; 
DateFormat formatter = new SimpleDateFormat("d-MMM-yyyy,HH:mm:ss aaa"); 
Date date = formatter.parse(testDate); 
System.out.println(date); 

It in "Thu Tháng Tư 29 13:00:14 CEST 2010". Mã trên sẽ in trên hệ thống của bạn như thế nào? Nếu nó hoạt động, bạn có thể giảm ví dụ của bạn xuống một ví dụ đang hoạt động cho thấy sự cố không?

2

Bạn nên đặt TimeZone trong DateFormat của mình, nếu không nó sẽ sử dụng giá trị mặc định (tùy thuộc vào cài đặt của máy tính).

+0

Tôi đã chỉ định múi giờ theo định dạng là chữ cái z, vẫn còn tồn tại –

+0

Chuỗi ngày của bạn không có thông tin múi giờ để chữ cái z không có tác dụng, sử dụng setTimeZone (...) trên đối tượng SimpleDateFormat thay vì – Guillaume

4

Có vẻ như bạn có thể muốn sử dụng một cái gì đó như SimpleDateFormat. http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html

Bạn khai báo định dạng ngày và sau đó gọi phương thức phân tích bằng chuỗi của bạn.

private static final DateFormat DF = new SimpleDateFormat(...); 
Date myDate = DF.parse("1234"); 

Và như Guillaume nói, hãy đặt múi giờ!

+0

Không liên quan nhưng các đối tượng DateFormat không phải là luồng an toàn, chúng không được khai báo tĩnh bởi vì nó làm cho nó có nhiều khả năng là chúng sẽ được truy cập từ các luồng khác nhau tại một số điểm. – Guillaume

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