Làm thế nào để bạn có được giờ và phút từ Date.getHours
và Date.getMinutes
đã bị phản đối? Các ví dụ mà tôi tìm thấy trên tìm kiếm của Google đã sử dụng các phương pháp không dùng nữa.
Làm thế nào để bạn có được giờ và phút từ Date.getHours
và Date.getMinutes
đã bị phản đối? Các ví dụ mà tôi tìm thấy trên tìm kiếm của Google đã sử dụng các phương pháp không dùng nữa.
Câu trả lời:
Hãy thử sử dụng Joda Time thay vì các lớp java.util.Date tiêu chuẩn. Thư viện Joda Time có API tốt hơn nhiều để xử lý ngày.
DateTime dt = new DateTime(); // current time
int month = dt.getMonth(); // gets the current month
int hours = dt.getHourOfDay(); // gets hour of day
Xem câu hỏi này để biết những ưu và nhược điểm của việc sử dụng thư viện Joda Time.
Joda Time cũng có thể được đưa vào một số phiên bản tương lai của Java như là một thành phần tiêu chuẩn, xem JSR-310 .
Nếu bạn phải sử dụng các lớp java.util.Date và java.util.CalWiki truyền thống, hãy xem JavaDoc của họ để được trợ giúp ( java.util.CalWiki và java.util.Date ).
Bạn có thể sử dụng các lớp truyền thống như thế này để tìm nạp các trường từ thể hiện Ngày đã cho.
Date date = new Date(); // given date
Calendar calendar = GregorianCalendar.getInstance(); // creates a new calendar instance
calendar.setTime(date); // assigns calendar to given date
calendar.get(Calendar.HOUR_OF_DAY); // gets hour in 24h format
calendar.get(Calendar.HOUR); // gets hour in 12h format
calendar.get(Calendar.MONTH); // gets month number, NOTE this is zero based!
Từ Javadoc cho Date.getHours
As of JDK version 1.1, replaced by Calendar.get(Calendar.HOUR_OF_DAY)
Vì vậy, sử dụng
Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY);
và tương đương với getMinutes.
ZonedDateTime
Thay vào đó hãy sử dụng .
Trong khi tôi là một fan hâm mộ của Joda-Time , Java 8 giới thiệu gói java.time cuối cùng là một giải pháp tiêu chuẩn Java đáng giá! Đọc bài viết này, Ngày và Giờ của Java SE 8 , để có lượng thông tin tốt về java.time ngoài giờ và phút.
Đặc biệt, nhìn vào LocalDateTime
lớp học.
Giờ và phút:
LocalDateTime.now().getHour();
LocalDateTime.now().getMinute();
LocalDateTime.now(ZoneId.of("Asia/Manilla"))
. now()
Chỉ đọc một lần để thống nhất (thời gian sẽ trôi qua giữa hai cuộc gọi). Nếu ngày thực sự không liên quan, LocalTime
làm việc quá.
ZonedDateTime
lớp hơn là LocalDateTime
. Với LocalDateTime
bạn đang loại bỏ thông tin múi giờ có giá trị mà không có lý do, không có gì đạt được.
ZonedDateTime.now().getHour()
… hoặc là …
LocalTime.now().getHour()
ZonedDateTime
Câu trả lời của JD là tốt nhưng không tối ưu. Câu trả lời đó sử dụng LocalDateTime
lớp. Không có bất kỳ khái niệm nào về múi giờ hoặc bù từ UTC, lớp đó không thể biểu thị một khoảnh khắc.
Tốt hơn để sử dụng ZonedDateTime
.
ZoneId z = ZoneID.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
Nếu bạn bỏ qua ZoneId
đối số, một đối số sẽ được áp dụng hoàn toàn trong thời gian chạy bằng cách sử dụng múi giờ mặc định hiện tại của JVM.
Vậy đây:
ZonedDateTime.now()
Sôi cũng giống như thế này:
ZonedDateTime.now( ZoneId.systemDefault() )
Tốt hơn là rõ ràng, vượt qua múi giờ mong muốn / mong đợi của bạn. Mặc định có thể thay đổi bất cứ lúc nào trong thời gian chạy.
Nếu quan trọng, xác nhận múi giờ với người dùng.
Thẩm vấn trong ZonedDateTime
giờ và phút.
int hour = zdt.getHour() ;
int minute = zdt.getMinute() ;
LocalTime
Nếu bạn muốn chỉ là thời gian trong ngày mà không có múi giờ, hãy giải nén LocalTime
.
LocalTime lt = zdt.toLocalTime() ;
Hoặc bỏ qua ZonedDateTime
hoàn toàn, đi trực tiếp đến LocalTime
.
LocalTime lt = LocalTime.now( z ) ; // Capture the current time-of-day as seen in the wall-clock time used by the people of a particular region (a time zone).
Các java.time khung được xây dựng vào Java 8 và sau đó. Những lớp học thay thế cái cũ phiền hà di sản lớp học ngày thời gian như java.util.Date
, Calendar
, & SimpleDateFormat
.
Để tìm hiểu thêm, xem Hướng dẫn Oracle . Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310 .
Các Joda thời gian dự án, bây giờ trong chế độ bảo trì , khuyên chuyển đổi sang các java.time lớp.
Bạn có thể trao đổi các đối tượng java.time trực tiếp với cơ sở dữ liệu của bạn. Sử dụng trình điều khiển JDBC tương thích với JDBC 4.2 trở lên. Không cần chuỗi, không cần java.sql.*
lớp.
Nơi để có được các lớp java.time?
Các ThreeTen-Extra dự án mở rộng java.time với các lớp bổ sung. Dự án này là một nền tảng chứng minh cho các bổ sung có thể trong tương lai cho java.time. Bạn có thể tìm thấy một số các lớp học hữu ích ở đây chẳng hạn như Interval
, YearWeek
, YearQuarter
, và nhiều hơn nữa .
Hãy thử lịch. Sử dụng getInstance để lấy Calender-Object. Sau đó sử dụng setTime để đặt Ngày bắt buộc. Bây giờ bạn có thể sử dụng get (trường int) với hằng số thích hợp như HOUR_OF_DAY hoặc hơn để đọc các giá trị bạn cần.
http://java.sun.com/javase/6/docs/api/java/util/CalWiki.html
int hr=Time.valueOf(LocalTime.now()).getHours();
int minutes=Time.valueOf(LocalTime.now()).getMinutes();
Các hàm này sẽ trả về giá trị int trong giờ và phút.
java.sql.Time
không? Chắc chắn không có lý do nào để đưa lớp lỗi thời đó vào chơi khi bạn có java.time.LocalTime
. Bạn đang quá phức tạp.
getMinutes()
đã bị phản đối (Tôi đang sử dụng java 1.8) và đã được thay thế bằngCalendar.get(Calendar.MINUTE)
Một cách nữa để có được vài phút và giờ là sử dụng SimpleDateFormat.
SimpleDateFormat formatMinutes = new SimpleDateFormat("mm")
String getMinutes = formatMinutes.format(new Date())
SimpleDateFormat formatHours = new SimpleDateFormat("HH")
String getHours = formatHours.format(new Date())
java.util.Date
, java.util.Calendar
và java.text.SimpleDateFormat
bây giờ là di sản , thay thế bởi sự java.time class built vào Java 8 và sau đó. Xem Hướng dẫn của Oracle .
Tôi muốn giới thiệu thời gian tìm kiếm quảng cáo joda. http://www.joda.org/joda-time/
Tôi sợ thêm một thư viện khác vào dự án dày của mình, nhưng nó thật dễ dàng, nhanh chóng và thông minh và tuyệt vời. Thêm vào đó, nó chơi tốt với mã hiện có, ở một mức độ nào đó.
Mặc dù tôi không khuyên bạn nên làm như vậy, tôi nghĩ rằng đáng để chỉ ra rằng mặc dù nhiều phương thức trên java.util.Date đã không được chấp nhận, nhưng chúng vẫn hoạt động. Trong các tình huống tầm thường, có thể sử dụng chúng. Ngoài ra, java.util.CalWiki khá chậm, vì vậy getMonth và getYear on Date có thể nhanh hơn một cách hữu ích.
java.util.Date
,java.util.Calendar
vàjava.text.SimpleDateFormat
bây giờ là di sản , thay thế bởi sự java.time class built vào Java 8 và sau đó. Xem Hướng dẫn của Oracle .