2011-08-22 27 views
12

Tôi có khối mã này trong đó đối số cho dateFormat.format sẽ luôn là string đó là lý do tại sao tôi đã làm .toString() tại đây. Tôi nhận được lỗi "Không thể định dạng đối tượng đã cho làm Ngày".SimpleDateFormat String

Có cách nào để thực hiện việc này không? Lưu ý rằng chuỗi đến từ cơ sở dữ liệu tôi đã sử dụng Date() mới làm mẫu ở đây.

SimpleDateFormat dateFormat = new SimpleDateFormat("MMMMM dd, yyyy"); 
String sCertDate = dateFormat.format(new Date().toString()); 
+0

nó không được rõ ràng những gì bạn đang cố gắng để đạt được cuối cùng – Bozho

Trả lời

21

DateFormat#format chấp nhận ngày, không phải chuỗi.

Sử dụng

String sCertDate = dateFormat.format(new Date()); 

Nếu bạn có một chuỗi đến từ các cơ sở dữ liệu là một định dạng cụ thể và bạn muốn chuyển đổi vào một ngày, bạn nên sử dụng phương pháp parse.

@Sonesh - Giả sử bạn có một chuỗi trong cơ sở dữ liệu xảy ra đại diện cho một ngày (có thể tốt hơn để lưu trữ đối tượng trong cơ sở dữ liệu dưới dạng ngày?), Sau đó bạn sẽ đầu tiên parse nó theo định dạng bạn muốn và sau đó format nó vào định dạng chuỗi bạn muốn.

// Assumes your date is stored in db with format 08/01/2011 
SimpleDateFormat dateFormatOfStringInDB = new SimpleDateFormat("MM/dd/yyyy"); 
Date d1 = dateFormatOfStringInDB.parse(yourDBString); 
SimpleDateFormat dateFormatYouWant = new SimpleDateFormat("MMMMM dd, yyyy"); 
String sCertDate = dateFormatYouWant.format(d1); 
+3

@ Evan phương thức 'parse()' chấp nhận một String. phương thức 'format()' chấp nhận một Date. – Marcelo

+0

@Marcelo: Sai lầm của tôi. –

+0

trong trường hợp của tôi nó sẽ luôn luôn có một chuỗi để định dạng tôi nên phân tích nó và hơn định dạng sử dụng? –

6

Có hai ứng dụng của SimpleDateFormat:

  • phân tích một chuỗi - khi bạn có một ngày biểu diễn dưới dạng chuỗi, và bạn muốn để có được những Date đối tượng tương ứng. Sau đó, sử dụng dateFormat.parse(string)

  • định dạng ngày - khi bạn có đối tượng Date và bạn muốn định dạng nó theo cách cụ thể (thường để hiển thị nó cho người dùng). Trong trường hợp đó, hãy sử dụng dateFormat.format(date)

Hai phương thức là một nghịch đảo - một ngày lấy một chuỗi và một chuỗi khác lấy một chuỗi và trả về một ngày.

Đối với trường hợp cụ thể của bạn, có lẽ bạn cần .parse(..). Nhưng lưu ý rằng mọi trình điều khiển cơ sở dữ liệu 'tự tôn trọng' phải có tùy chọn trả về một số Date thay vì một số biểu diễn chuỗi. Nếu bạn xảy ra để lưu trữ ngày như chuỗi trong DB - không làm điều đó. Sử dụng kiểu ngày gốc.

+0

+1 giải thích tốt. –

+0

Tôi đã cố sử dụng lỗi phân tích cú pháp. "Ngày không đọc được:" Thứ Hai ngày 22 tháng 8 16:10:16 GMT + 00: 00 2011 "". SimpleDateFormat dateFormat = new SimpleDateFormat ("MMMMM dd, yyyy"); \t \t Ngày được phân tích cú phápDate = dateFormat.parse (new Date().toString()); \t \t Chuỗi sCertDate = dateFormat.format (parsedDate); –

+2

tốt, rõ ràng là định dạng bạn chỉ định và định dạng ngày tháng khác nhau. – Bozho

4

Nếu bạn cần phải đọc một ngày với định dạng một chuỗi và đầu ra nó để một định dạng String, bạn cần 2 và định dạng, ví dụ:

SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd"); 
SimpleDateFormat outputFormat = new SimpleDateFormat("MMMMM dd, yyyy"); 
String output = outputFormat.format(inputFormat.parse(input)); 
+0

Tôi đã thử outputFormat.format này (inputFormat.parse (new Date(). ToString())); Và lỗi là "Ngày không thể chia sẻ:" Thứ Hai ngày 22 tháng 8 16:10:16 GMT + 00: 00 2011 "" –

+1

@Sonesh bạn cần một định dạng Ngày đầy đủ để phân tích "Mon Aug 22 16:10:16 GMT + 00: 00 2011 ". "yyyy-MM-dd" phân tích các ngày như "2010-11-25". – Marcelo

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