Làm cách nào để kiểm tra xem ngày có nằm giữa hai ngày khác hay không, trong trường hợp cả ba ngày được thể hiện bằng các trường hợp java.util.Date
?Làm cách nào để xác định xem ngày có nằm trong hai ngày trong Java không?
Trả lời
Nếu bạn không biết thứ tự của các min/max giá trị
Date a, b; // assume these are set to something
Date d; // the date in question
return a.compareTo(d) * d.compareTo(b) > 0;
Nếu bạn muốn phạm vi được bao gồm
return a.compareTo(d) * d.compareTo(b) >= 0;
Giống như vậy:
Date min, max; // assume these are set to something
Date d; // the date in question
return d.compareTo(min) >= 0 && d.compareTo(max) <= 0;
Bạn có thể sử dụng >
thay vì >=
và <
thay vì <=
để loại trừ các thiết bị đầu cuối từ cảm giác "giữa."
Cảm ơn bạn đã phản hồi ngay lập tức. –
Điều này không phải lúc nào cũng hiệu quả. Tôi đã gặp vấn đề khi sử dụng các đối tượng compareTo on Date. Ngày 1 tháng 1 năm 2006 rõ ràng là sau ngày 1 tháng 4 năm 2006 trong một trong các chương trình của tôi. – KitsuneYMG
@KitsuneYMG: Tôi đã thử đoạn mã sau và hoạt động như mong đợi: 'Date date1 = new Date (2006, 1, 1); // Jan 1,2006 Date date2 = new Date (2006, 4, 1); // Ngày 1 tháng 4 năm 2006 System.out.println (date1.compareTo (date2)); // -1 System.out.println (date2.compareTo (ngày1)); // 1'. Bạn có thể chia sẻ ở đây những gì là * không làm việc * cho bạn? – Gnanam
Điều này có thể dễ đọc hơn một chút:
Date min, max; // assume these are set to something
Date d; // the date in question
return d.after(min) && d.before(max);
Rất khỏe mạnh 9 giây nhanh hơn, thưa bạn. –
giữa có thể bao gồm các điểm cuối, trong trường hợp đó bạn có thể sử dụng trả về! D.before (min) &&! D.after (max); –
@Tetsujin no Oni xin lỗi người đàn ông, điều tốt đẹp của nó là tôi không có khả năng giao hàng lớn trong một vài tuần mà cả hai đều giúp và bị tổn thương bởi SO. :) –
bạn có thể sử dụng getTime()
và so sánh các giá trị tính theo giờ UTC dài trở lại.
CHỈNH SỬA nếu bạn chắc chắn bạn sẽ không phải đối phó với những ngày trước năm 1970, không chắc chắn nó sẽ hoạt động như thế nào trong trường hợp đó.
Một lựa chọn khác
min.getTime() <= d.getTime() && d.getTime() <= max.getTime()
Bạn có thể muốn có một cái nhìn tại Joda Time mà là một API thực sự tốt để đối phó với ngày/giờ. Mặc dù nếu bạn không thực sự cần nó cho các giải pháp cho câu hỏi hiện tại của bạn nó là ràng buộc để giúp bạn tiết kiệm đau trong tương lai.
Có suy nghĩ ngay lập tức của tôi là đề xuất thời gian Joda nhưng tôi không thể thấy bất cứ điều gì trong API để hỗ trợ kiểm tra "trong phạm vi". Ai khác? – dukedave
Tôi không đề xuất Joda cho vấn đề cụ thể này, vì nó đã có nhiều giải pháp. – willcodejavaforfood
Nhưng bạn sẽ tạo một Khoảng thời gian trong Thời gian Joda để thực hiện tác vụ này – willcodejavaforfood
import java.util.Date;
public class IsDateBetween {
public static void main (String[] args) {
IsDateBetween idb=new IsDateBetween("12/05/2010"); // passing your Date
}
public IsDateBetween(String dd) {
long from=Date.parse("01/01/2000"); // From some date
long to=Date.parse("12/12/2010"); // To Some Date
long check=Date.parse(dd);
int x=0;
if((check-from)>0 && (to-check)>0)
{
x=1;
}
System.out.println ("From Date is greater Than ToDate : "+x);
}
}
Đây là mã đẹp, đây có lẽ là một trong những chức năng tốt nhất mà tôi từng thấy. Nó đã giúp tôi rất nhiều. Cảm ơn bạn! – Bassiuz
Ở đây bạn đi:
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
String oeStartDateStr = "04/01/";
String oeEndDateStr = "11/14/";
Calendar cal = Calendar.getInstance();
Integer year = cal.get(Calendar.YEAR);
oeStartDateStr = oeStartDateStr.concat(year.toString());
oeEndDateStr = oeEndDateStr.concat(year.toString());
Date startDate = sdf.parse(oeStartDateStr);
Date endDate = sdf.parse(oeEndDateStr);
Date d = new Date();
String currDt = sdf.format(d);
if((d.after(startDate) && (d.before(endDate))) || (currDt.equals(sdf.format(startDate)) ||currDt.equals(sdf.format(endDate)))){
System.out.println("Date is between 1st april to 14th nov...");
}
else{
System.out.println("Date is not between 1st april to 14th nov...");
}
}
Dưới đây là một số cách để thực hiện việc này bằng cách sử dụng Joda-Time 2.3 thư viện.
Một cách là sử dụng các phương thức isBefore
và isAfter
đơn giản trên DateTime trường hợp. Nhân tiện, DateTime trong Joda-Time tương tự như khái niệm với java.util.Date (một thời điểm trong thời gian của Vũ trụ) nhưng bao gồm một múi giờ.
Một cách khác là tạo khoảng thời gian trong thời gian Joda. Các thử nghiệm phương pháp contains
nếu một Ngày giờ đã cho xảy ra trong khoảng thời gian được bao hàm bởi Khoảng thời gian. Sự bắt đầu của Khoảng thời gian được bao gồm, nhưng điểm cuối là độc quyền. Cách tiếp cận này được gọi là "Nửa mở", biểu tượng [)
.
Xem cả hai cách trong ví dụ mã sau.
Chuyển đổi các phiên bản java.util.Date thành các phiên bản Joda-Time DateTime
. Đơn giản chỉ cần chuyển thể hiện Date tới hàm tạo của DateTime. Trong thực tế, bạn cũng nên chuyển đối tượng DateTimeZone
cụ thể thay vì dựa vào múi giờ mặc định của JVM.
DateTime dateTime1 = new DateTime(new java.util.Date()).minusWeeks(1);
DateTime dateTime2 = new DateTime(new java.util.Date());
DateTime dateTime3 = new DateTime(new java.util.Date()).plusWeeks(1);
Hãy so sánh bằng cách kiểm tra cho trước/sau ...
boolean is1After2 = dateTime1.isAfter(dateTime2);
boolean is2Before3 = dateTime2.isBefore(dateTime3);
boolean is2Between1And3 = ((dateTime2.isAfter(dateTime1)) && (dateTime2.isBefore(dateTime3)));
Sử dụng cách tiếp cận Interval thay vì isAfter/isBefore ...
Interval interval = new Interval(dateTime1, dateTime3);
boolean intervalContainsDateTime2 = interval.contains(dateTime2);
Dump để an ủi ...
System.out.println("DateTimes: " + dateTime1 + " " + dateTime1 + " " + dateTime1);
System.out.println("is1After2 " + is1After2);
System.out.println("is2Before3 " + is2Before3);
System.out.println("is2Between1And3 " + is2Between1And3);
System.out.println("intervalContainsDateTime2 " + intervalContainsDateTime2);
Khi chạy ...
DateTimes: 2014-01-22T20:26:14.955-08:00 2014-01-22T20:26:14.955-08:00 2014-01-22T20:26:14.955-08:00
is1After2 false
is2Before3 true
is2Between1And3 true
intervalContainsDateTime2 true
Sau đây là cách để tìm xem hôm nay là giữa 2 tháng:
private boolean isTodayBetween(int from, int to) {
if (from < 0 || to < 0 || from > Calendar.DECEMBER || to > Calendar.DECEMBER) {
throw new IllegalArgumentException("Invalid month provided: from = " + from + " to = " + to);
}
Date now = new Date();
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(now);
int thisMonth = cal.get(Calendar.MONTH);
if (from > to) {
to = to + Calendar.DECEMBER;
thisMonth = thisMonth + Calendar.DECEMBER;
}
if (thisMonth >= from && thisMonth <= to) {
return true;
}
return false;
}
và gọi nó là thích:
isTodayBetween(Calendar.OCTOBER, Calendar.MARCH)
giữa ngày Bao gồm điểm cuối có thể được viết như
public static boolean isDateInBetweenIncludingEndPoints(final Date min, final Date max, final Date date){
return !(date.before(min) || date.after(max));
}
- 1. xác định xem phạm vi ngày có nằm trong khoảng thời gian khác hay không - sql
- 2. RSpec - Ngày phải nằm trong khoảng từ hai ngày
- 3. Xác định xem ngày hôm nay là trong một phạm vi của hai ngày trên iOS
- 4. PHP, xem phạm vi ngày có nằm trong một phạm vi ngày khác không
- 5. Trừ hai ngày trong Java
- 6. Làm thế nào để có được số ngày giữa hai ngày trong java?
- 7. Làm cách nào để xác định xem một ngày có rơi vào cuối tuần không?
- 8. Cách kiểm tra xem hai ngày không có trong cùng ngày dương lịch
- 9. Cách tốt nhất để xác định xem ngày tháng có trong JavaScript không?
- 10. Làm cách nào để xác định xem thời gian hiện tại có nằm trong phạm vi được chỉ định bằng mô-đun ngày giờ của Python không?
- 11. Làm cách nào để kiểm tra xem ngày nhập liệu có bằng ngày hôm nay không?
- 12. Làm cách nào để trừ hai ngày trong Django/Python?
- 13. Trích xuất thời gian từ ngày giờ và xác định xem thời gian (không phải ngày) có nằm trong phạm vi không?
- 14. Làm cách nào để kiểm tra xem ngày hiện tại có đang hoạt động vào ngày
- 15. Làm thế nào để định dạng chuỗi ngày trong java?
- 16. kiểm tra xem một ngày có giữa hai ngày (javascript)
- 17. Làm cách nào để xác định xem một ngày cụ thể có phải là ngày trong tuần thứ N của tháng không?
- 18. Cách xác định ngày sinh hoặc ngày kỷ niệm xảy ra trong phạm vi ngày
- 19. Xác định xem biến có nằm trong phạm vi không?
- 20. Làm cách nào để xác định ngày nhập từ MySQL?
- 21. Làm cách nào để hợp nhất hai ngày trong JavaScript?
- 22. Java, Tính số ngày giữa hai ngày
- 23. Ngày giữa hai ngày trong Python
- 24. Làm cách nào để xác thực ngày trong đường ray?
- 25. Làm thế nào để xác định xem đó là ngày hay đêm trong javascript hoặc jquery?
- 26. Cách tìm ngày tháng giữa hai ngày được chỉ định?
- 27. Cách tốt nhất để kiểm tra xem hai ngày có cùng ngày theo lịch trong Groovy không?
- 28. Làm cách nào để định dạng Ngày trong Flash?
- 29. java So sánh hai ngày
- 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?
Hoạt động, nhưng không thể đọc được. Dù sao cũng cảm ơn bạn. –
@BrunoDeFreitasBarros Bạn có ý nghĩa gì bởi "không đọc được"? –
@Peter Lawrey Bruno có nghĩa là thật khó để hiểu được code w/o bình luận. – Mirimas