Làm cách nào để định dạng Dấu thời gian java.sql để hiển thị?


103

Làm cách nào để tạo Dấu thời gian java.sql theo ý thích của tôi? (thành một chuỗi, cho mục đích hiển thị)

Câu trả lời:


160

java.sql.Timestampmở rộng java.util.Date. Bạn có thể làm:

String s = new SimpleDateFormat("MM/dd/yyyy").format(myTimestamp);

Hoặc cũng bao gồm thời gian:

String s = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(myTimestamp);

3
Điều đó sẽ hoạt động, nhưng hãy cẩn thận vì SimpleDateFormat không an toàn cho chuỗi.
Brian Agnew,

17
Chỉ cần một lời nhắc nhỏ rằng nếu đối tượng SimpleDateFormat là một đối tượng phạm vi cục bộ (nó chỉ được tạo và sử dụng bên trong một phương thức), thì nó là luồng an toàn, vì ngăn xếp mà nó sẽ cư trú vốn dĩ là "luồng an toàn" (vì nó thuộc một luồng duy nhất).
quantum

5
Để bao gồm thời gian, bạn sẽ cần phải sử dụng SimpleDateFormat ( "MM / dd / yyyy hh: mm") hoặc một cái gì đó tương tự
AverageMarcus

1
để làm cho nó hoàn chỉnh cho những người cần nó, String S = new SimpleDateFormat ("MM / dd / yyyy HH: mm: ss"). format (myTimestamp);
Ishan Liyanage

27

Sử dụng String.format (hoặc java.util.Formatter ):

Timestamp timestamp = ...
String.format("%1$TD %1$TT", timestamp)

EDIT:
vui lòng xem tài liệu của Formatter để biết TD và TT nghĩa là gì: click vào java.util.

Chữ 'T' đầu tiên là viết tắt của:

't', 'T'    date/time   Prefix for date and time conversion characters.

và ký tự theo sau 'T':

'T'     Time formatted for the 24-hour clock as "%tH:%tM:%tS".
'D'     Date formatted as "%tm/%td/%ty". 

1
Đây là câu trả lời tốt nhất, theo tôi. Không có đối tượng thừa nào được tạo chỉ để chuyển đổi dấu thời gian thành chuỗi.
Salil

1
Bây giờ nó phải rõ ràng nơi để tìm tài liệu và ý nghĩa của nó
user85421

Rất thanh lịch. Chỉ cần rõ ràng, định dạng được tạo ra bởi ví dụ ở đây trông như thế nào 05/30/17 00:39:18.
Noumenon

@Noumenon cảm ơn, đó là định dạng "theo ý thích của tôi" như câu hỏi yêu cầu [:-)
user85421

10

Đối với câu hỏi cụ thể này, gợi ý tiêu chuẩn về java.text.SimpleDateFormathoạt động, nhưng có tác dụng phụ đáng tiếc SimpleDateFormat là không an toàn cho chuỗi và có thể là nguồn gốc của các vấn đề đặc biệt khó chịu vì nó sẽ làm hỏng đầu ra của bạn trong các tình huống đa luồng và bạn sẽ không nhận được bất kỳ ngoại lệ!

Tôi sẽ mạnh mẽ khuyên bạn nên nhìn Joda cho bất cứ điều gì như thế này. Tại sao ? Đó là một thư viện ngày / giờ phong phú và trực quan hơn nhiều cho Java so với thư viện hiện tại (và là cơ sở của thư viện ngày / giờ Java tiêu chuẩn mới cập nhật, vì vậy bạn sẽ sớm học được một tiêu chuẩn API).


8
Cảnh báo tốt. Nhưng rất dễ giải quyết - không chia sẻ các cá thể SimpleDateFormat bằng cách lưu trữ chúng trong phạm vi phiên / biến phiên bản / ngữ cảnh tĩnh và sau đó truy cập chúng từ nhiều luồng. Chỉ cần tạo một SimpleDateFormat () mới trong phương thức của bạn và loại bỏ nó sau khi sử dụng. Đó là threadsafe.
Glen Best

Tất nhiên nếu bạn thực sự muốn lưu trữ / chia sẻ cá thể SimpleDateFormat, thì hãy đồng bộ hóa quyền truy cập: sync (simpleDateFormatInstance) {s = simpleDateFormatInstance.format (myTimeStamp)} HOẶC tạo một phần mở rộng tùy chỉnh của lớp SDF và thực hiện việc này tự động trong phương thức định dạng.
Glen Best



-9

Chuỗi timeFrSSHStr = timeFrSSH.toString ();

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.