Tôi cần kiểm tra xem ngày cụ thể có sau ngày hôm nay 23:59:59 không, làm cách nào để tạo đối tượng ngày hôm nay là 23:59:59?Ngày hết hạn hôm nay trong Java
Trả lời
Sử dụng java.util.Calendar:
Calendar cal = Calendar.getInstance(); // represents right now, i.e. today's date
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
cal.set(Calendar.MILLISECOND, 999); // credit to f1sh
Date date = cal.getTime();
Tôi nghĩ rằng bạn có thể được tiếp cận từ góc hơi sai, mặc dù. Thay vì cố gắng tạo một phiên bản Date là một nguyên tử trước nửa đêm, cách tiếp cận tốt hơn có thể là tạo Ngày biểu thị nửa đêm và kiểm tra xem thời gian hiện tại có là nghiêm ngặt hơn ít hơn không. Tôi tin rằng điều này sẽ hơi rõ ràng hơn về ý định của bạn cho người khác đọc mã.
Hoặc, bạn có thể sử dụng API ngày của bên thứ ba biết cách chuyển đổi về ngày. API ngày dựng sẵn của Java thường được coi là thiếu theo nhiều cách. Tôi sẽ không khuyên bạn nên sử dụng thư viện khác chỉ để làm điều này, nhưng nếu bạn phải làm rất nhiều thao tác ngày và/hoặc đã sử dụng một thư viện như Joda Time bạn có thể diễn tả khái niệm này đơn giản hơn. Ví dụ: Joda Time có lớp DateMidnight
cho phép so sánh dễ dàng hơn nhiều so với ngày "thô" của loại bạn đang làm, không có khả năng xảy ra sự cố tinh tế (như không đặt mili giây trong lần cắt đầu tiên của tôi).
Về 'Calendar.getInstance()': Hãy nhớ rằng 'Lịch' trả về cũng chứa giá trị hiện tại trong mili giây. Tôi không biết điều đó và gần đây tôi đã mất cả ngày để tìm hiểu tại sao 'equals()' luôn luôn trả về sai. – f1sh
Điểm tốt f1sh - có lẽ cách tiếp cận ở đây hơi sai, xem chỉnh sửa sắp tới. –
Chỉ bao gồm: cal.set (Lịch.MILLISECOND, 0); // hoặc 999 –
Sử dụng
Date.before(Date) hoặc Date.after (ngày)
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, 23);
c.set(Calendar.SECOND, 59);
c.set(Calendar.MINUTE, 59);
Date d = c.getTime()
Date x = // other date from somewhere
x.after(d);
Tìm ngày mai chuyển đổi nó thành một phần nghìn giây bạn sẽ có được một chặng đường dài giá trị . trừ -1 từ nó và một lần nữa chuyển đổi cho đến nay bạn sẽ nhận được ngày yêu cầu của bạn.
ví dụ: 12:00:00 ngày mai chuyển đổi thành mili giây. bạn sẽ nhận được như một giá trị dài 312313564774 trừ -1 bạn sẽ nhận được thời gian eod ngày hôm nay bằng mili giây
Điều này tạo ra một ngày trong tương lai và so sánh nó với ngày hiện tại (đặt đến tối muộn). Bạn nên cân nhắc sử dụng Thư viện thời gian Joda.
long timeStampOfTomorrow = new Date().getTime() + 86400000L;
Date dateToCheck = new Date(timeStampOfTomorrow);
Calendar today = Calendar.getInstance();
today.set(Calendar.HOUR_OF_DAY, 23);
today.set(Calendar.MINUTE, 59);
today.set(Calendar.SECOND, 59);
today.set(Calendar.MILLISECOND, 999);
boolean isExpired = dateToCheck.after(today.getTime());
Với Thư viện thời gian Joda bạn có thể làm điều này dễ đọc hơn. Một ví dụ dễ dàng có thể được tìm thấy trên project website.
public boolean isRentalOverdue(DateTime datetimeRented) {
Period rentalPeriod = new Period().withDays(2).withHours(12);
return datetimeRented.plus(rentalPeriod).isBeforeNow();
}
Tôi cho rằng bạn có nghĩa là "java.util.Date đã cho sau hôm nay?".
Nếu có, đừng lo lắng về việc xác định thời điểm cuối cùng trong ngày; đó là không thể thực hiện được vì phần thập phân. Tốt hơn là chỉ tập trung vào ngày mà không có thời gian trong ngày. Bạn muốn biết liệu ngày tháng của thời điểm cụ thể có chỉ sau ngày tháng hiện tại của thời điểm hiện tại hay không. Một múi giờ rất quan trọng ở đây.
tl; dr
ZoneId z = ZoneId.of(“America/Montreal”); // Time zone determines date.
Boolean givenMomentIsAfterToday = myUtilDate.toInstant().atZone(z).toLocalDate().isAfter(LocalDate.now(z));
Chi tiết
Bạn đang sử dụng các lớp học ngày thời gian cũ phiền hà hiện thay thế bởi các lớp java.time.
Trước tiên, hãy chuyển đổi số java.util.Date
nhất định thành Instant
.Tìm các phương thức chuyển đổi mới được thêm vào các lớp cũ để chuyển đổi sang/từ các loại java.time.
Instant
Lớp Instant
đại diện cho một thời điểm trên Timeline trong UTC với độ phân giải nanoseconds.
Instant instant = myUtilDate.toInstant();
LocalDate
Lớp LocalDate
đại diện cho một giá trị ngày tháng chỉ mà không cần thời gian của ngày và không có múi giờ.
Múi giờ rất quan trọng trong việc xác định ngày. Đối với bất kỳ thời điểm cụ thể nào, ngày thay đổi trên toàn cầu theo múi giờ. Ví dụ, một vài phút sau nửa đêm ở Paris Pháp là một ngày mới trong khi vẫn “ngày hôm qua” ở Montréal Québec.
ZoneId z = ZoneId.of(“America/Montreal”);
LocalDate today = LocalDate.now(z);
ZonedDateTime
Điều chỉnh ngay lập tức vào cùng múi giờ để so sánh các ngày.
ZonedDateTime zdt = instant.atZone(z);
Tra cứu giá trị chỉ ngày, LocalDate
.
LocalDate ldt = zdt.toLocalDate();
Cuối cùng, so sánh các đối tượng LocalDate
.
Boolean givenMomentIsAfterToday = ldt.isAfter(today);
Về java.time
Khung java.time được xây dựng vào Java 8 và sau đó. Các lớp này thay thế các lớp học ngày giờ phiền hà cũ như java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
.
Dự án Joda-Time, hiện đang ở maintenance mode, khuyên di chuyển sang java.time.
Để tìm hiểu thêm, hãy xem Oracle Tutorial. Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích.
Hầu hết các chức năng java.time được back-chuyển đến Java 6 & 7 trong ThreeTen-Backport và tiếp tục thích nghi với Android trong ThreeTenABP (xem How to use…).
Dự án ThreeTen-Extra 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 những bổ sung có thể có trong tương lai vào java.time. Bạn có thể tìm thấy một số lớp học hữu ích tại đây như Interval
, YearWeek
, YearQuarter
và hơn thế nữa.
- 1. so sánh ngày jpql ngày hôm nay
- 2. WPF DatePicker mặc định ngày hôm nay
- 3. Số học ngày trong Java, thêm 3 tháng kể từ hôm nay
- 4. jQuery datepicker - thay đổi ngày "hôm nay"?
- 5. Đếm ngày cho đến hôm nay moment.js
- 6. MySQL Chọn Ngày Bằng Hôm nay
- 7. Làm cách nào để hạn chế ngày tối đa của ngày hôm nay?
- 8. Kịch bản phù hợp trong ngày hôm nay
- 9. Ngày hết hạn JRE
- 10. Ngày giờ 25 năm kể từ ngày hôm nay
- 11. Mục tiêu C - nhận ngày hôm sau từ hôm nay (ngày mai)
- 12. Ngày hết hạn cookie
- 13. Thay thế đối tượng hẹn hò với “hôm nay” và “ngày hôm qua” chuỗi trong iphone
- 14. Nhận dấu thời gian của ngày hôm nay và hôm qua trong php
- 15. iOS 5 - Đặt ngày tối thiểu UIDatePicker thành "hôm nay"
- 16. Tính toán tuổi Oracle từ ngày sinh và hôm nay
- 17. vô hiệu hóa các ngày trong lịch jquery giữa ngày hôm nay và ngày đặt
- 18. PostgreSQL, ngày kiểm tra liên quan đến "hôm nay"
- 19. Groovy nhận ngày hôm nay vào phút 00:00:00
- 20. jQuery datepicker với ngày hôm nay như maxdate
- 21. Kiểm tra xem ngày được chỉ định là hôm nay, hôm qua hay một ngày trong tương lai
- 22. Tìm hiểu xem NSDate là hôm nay, hôm qua, ngày mai
- 23. Trừ đi 24 giờ mỗi ngày trong T-SQL từ Ngày hôm nay
- 24. Làm thế nào để vô hiệu hóa ngày trước ngày hôm nay trong jquery UI datepicker?
- 25. Xác định xem ngày hôm nay là trong một phạm vi của hai ngày trên iOS
- 26. Làm cách nào để xác thực ngày như sau ngày hôm nay trong Rails?
- 27. làm thế nào để vô hiệu hóa ngày trước ngày hôm nay trong jQuery datepicker
- 28. Nhận các đối tượng có ngày lớn hơn ngày hôm nay hoặc ngày trống
- 29. Làm cách nào để lấy dữ liệu ngày hôm nay/ngày hôm qua từ cơ sở dữ liệu MySQL?
- 30. C# Làm cách nào để kiểm tra xem ngày hiện có là chuỗi ngày hôm nay?
Ý của bạn là vào hoặc sau ngày mai vào lúc nửa đêm? Hay bạn quan tâm trong một giây từ 23:59:59 đến 00:00:00? –