2009-07-20 37 views

Trả lời

135

java.sql.Timestamp kéo dài java.util.Date. Bạn có muốn một cái gì đó như:

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

Để bao gồm thời gian:

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

Điều đó sẽ hiệu quả, nhưng hãy cẩn thận vì SimpleDateFormat không an toàn với luồng. –

+17

Chỉ cần một lời nhắc nhở nhỏ rằng nếu đối tượng SimpleDateFormat là một đối tượng có phạm vi cục bộ (nó được tạo ra và chỉ được sử dụng bên trong một phương thức), thì nó là an toàn luồng, vì ngăn xếp trên đó sẽ nằm trong "thread-safe" (như nó thuộc về một sợi đơn). – 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

8

Nếu bạn đang sử dụng MySQL và muốn cơ sở dữ liệu riêng của mình để thực hiện việc chuyển đổi, sử dụng này:

DATE_FORMAT(date,format)

Nếu bạn thích để định dạng sử dụng Java, sử dụng này:

java.text.SimpleDateFormat

SimpleDateFormat dateFormat = new SimpleDateFormat("M/dd/yyyy"); 
dateFormat.format(new Date()); 
2

Sử dụng một DateFormat. Trong một ứng dụng được quốc tế hóa, hãy sử dụng định dạng được cung cấp bởi getInstance. Nếu bạn muốn kiểm soát rõ ràng định dạng, hãy tự tạo SimpleDateFormat mới.

9

Đối với câu hỏi đặc biệt này, đề nghị tiêu chuẩn của java.text.SimpleDateFormat công trình, nhưng có tác dụng phụ đáng tiếc rằng SimpleDateFormatis not thread-safe và có thể là nguồn gốc của vấn đề đặc biệt khó chịu vì nó sẽ làm hỏng đầu ra của bạn trong các kịch bản đa luồng, và bạn sẽ không nhận được bất kỳ ngoại lệ nào!

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

+8

Cảnh báo tốt.Nhưng rất dễ dàng để giải quyết - không chia sẻ các cá thể SimpleDateFormat bằng cách lưu trữ chúng trong các biến phiên/biến phiê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à luồng an toàn. –

+0

Tất nhiên nếu bạn thực sự muốn lưu trữ/chia sẻ cá thể SimpleDateFormat, sau đó đồng bộ hóa 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 điều này tự động trong phương thức format. –

22

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

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

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

Đầu tiên ' T '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 hay 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

TD và TT trong mã này là gì? –

+1

Bây giờ phải rõ nơi tìm tài liệu và ý nghĩa của nó là –

-8

Thời gian chuỗiFrSSHStr = timeFrSSH.toString();

+4

'timeFrSSH' là gì? –

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