2013-03-22 28 views
6

Cách chính xác để biểu thị thời gian trong ngày bằng Java là gì?Làm thế nào để đại diện cho thời gian trong ngày (tức là 19:00) trong Java?

Ví dụ: 09:00, 19:30, v.v.

Về cơ bản đây là thời gian trong ngày không được liên kết với ngày/ngày thực tế.

+2

Bạn đã nghe nói về [SimpleDateFormat] (http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat .html)? –

+1

Sử dụng 'LocalTime' từ thư viện [Joda Time] (http://joda-time.sourceforge.net/). – Jesper

+1

@ Eng.Fouad: Câu hỏi không đề cập đến phân tích cú pháp hoặc định dạng văn bản. Nó chỉ nói về cách tốt nhất để đại diện cho một giá trị. –

Trả lời

10

Bạn đã gắn thẻ thẻ này với jodatime.

Loại thời gian Joda để lưu trữ thời gian trong ngày là org.joda.time.LocalTime. Xem Thời gian Joda API documentation.

+0

@jarnbjo Như các tài liệu API nói, 'LocalTime' đại diện cho một thời gian mà không có một múi giờ, do đó, nó không có bất cứ điều gì để làm với các thay đổi DST. Nó chỉ là một thời gian trong ngày, không cho bất kỳ ngày cụ thể. Joda Time có rất nhiều lớp ngày và giờ khác nhau cho các mục đích khác nhau. – Jesper

+0

Tôi đồng ý rằng Joda có rất nhiều lớp học và hầu hết đều kém tài liệu. Tài liệu API cho LocalTime cũng cho biết "Các tính toán trên LocalTime được thực hiện bằng cách sử dụng Chronology. Thứ tự thời gian này sẽ được đặt trong nội bộ theo múi giờ UTC cho tất cả các phép tính", phần nào mâu thuẫn với đoạn mã tài liệu API của bạn. Vì vậy, ngay cả khi LocalTime không trực tiếp tham khảo một múi giờ, nó tham khảo một thứ tự thời gian và thời gian tham khảo UTC. Vai trò nào trong thời gian chơi và lý do tại sao nó đề cập rằng niên đại sẽ được đặt thành UTC nếu LocalTime là TZ-thuyết bất khả tri? – jarnbjo

-3

Thông thường, khi không bắt buộc phải hiển thị nó, sử dụng dài.

Xem System.currentTimeMillis().

+2

System.currentTimeMillis sẽ là một cách rất xấu để đại diện cho thời gian trong ngày –

+0

Như tôi đã nói - khi nó KHÔNG có nghĩa là để được hiển thị. Tôi nghĩ rằng 'không có một ngày' có nghĩa là không java.util.Date. Vì vậy, một chút quá nhanh để cho tôi điểm số tồi, phải không? :-) –

+0

_Ví dụ: 09:00, 19:30, v.v. Anh ấy muốn hiển thị Thời gian ở định dạng có thể đọc được của con người mà không có ngày. –

0

Hãy thử điều này:

Calendar cal = Calendar.getInstance(); 

     cal.get(Calendar.HOUR_OF_DAY); 
     cal.get(Calendar.MINUTE); 
-4

Giống như Eng.Fouad gợi ý, bạn vẫn nên sử dụng một đối tượng Date. Bằng cách đó bạn vẫn có quyền truy cập vào tất cả các tiện ích tồn tại cho các đối tượng Date. Chỉ cần bỏ qua phần ngày của nó bất cứ khi nào bạn trình bày nó.

Date date = new Date(); 
DateFormat df = new SimpleDateFormat("hh:mm"); 
String timeOfDay = df.format(date); // ex: "18:00" 

Hoặc để tạo ra một thời gian cụ thể

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.HOUR_OF_DAY, 18); 
cal.set(Calendar.MINUTE, 00); 
DateFormat df = new SimpleDateFormat("hh:mm"); 
String timeOfDay = df.format(cal.getTime()); // "18:00" 
+6

Không, bạn hoàn toàn không nên * không * sử dụng đối tượng 'Ngày'. Đó là biểu diễn sai. Một đối tượng 'Date' đại diện cho một khoảnh khắc trong thời gian, và đó là tất cả. (Nó được đặt tên rất tệ.) Joda Time có kiểu * đặc biệt * cho trường hợp này - đó là cách tiếp cận đúng. API Java về cơ bản bị hỏng do không cung cấp đủ loại để đại diện cho các loại giá trị khác nhau tự nhiên xảy ra trong công việc ngày/giờ.Cũng lưu ý rằng nếu bạn * sử dụng * SimpleDateFormat', bạn cần phải quan tâm hơn đến các mẫu - mẫu bạn đã đưa ra sẽ không bao giờ tạo ra "18:00" khi bạn đang sử dụng đồng hồ 12 giờ. –

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