我的代码有问题,我使用字符串(“ 2019/07/23”),并且要添加具有单独函数的日期,但是当我将这些新日期发送给另一个函数时(给我一个值),则此其他函数无法识别这些日期。但是如果我手动发送这些日期(“ 2019/07/24”而不是变量DATE),则另一个函数现在给我一个值。我不知道为什么,因为我将此变量与字符串(“ 2019/07/23” .equals(date))进行了比较,它们等于...
String datex = "2019/07/23";
while(!datex.equals(dateUntil)){
turn = diary.turns(lawyer, datex);
while(turn != null){
sum++;
}
datex = addDay(datex, 1);
}
答案 0 :(得分:2)
您没有提供足够的详细信息来诊断问题。但我可以为您提供正确方法的简单代码示例。
首先,尽可能使用ISO 8601标准格式将日期时间值序列化为人类可读的文本。对于日期为YYYY-MM-DD。
LocalDate
如果无法使用ISO 8601格式,请使用格式设置样式来定义DateTimeFormatter
以匹配您的输入。然后解析为LocalDate
。 LocalDate
类表示没有日期,没有time zone或offset-from-UTC的仅日期值。
String input = "2019/07/23";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu/MM/dd" ) ;
LocalDate ld = LocalDate.parse( input , f ) ;
或者使您的输入符合ISO 8601。
String input = "2019/07/23".replace( "/" , "-" ) ;
LocalDate ld = LocalDate.parse( input ) ;
获取另一个日期。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
LocalDate today = LocalDate.now( z ) ;
比较。呼叫LocalDate::isBefore
,isAfter
和isEqual
。
boolean overdue = ld.isBefore( today ) ;
停止固定在字符串上。您应该传递适当类型的对象,而不仅仅是字符串。这样做将使您的代码更具自记录性,提供类型安全性,确保有效值并减少出错的可能性。
将参数类型从String
更改为LocalDate
。
答案 1 :(得分:-1)
您是否尝试过使用Java Date
类,该类随附用于比较日期的方法,包括检查某个日期是在另一个日期之前还是之后?
例如
long date2mills = 1563922800000L; //2019/07/24 in milliseconds
Date date1 = new Date(System.currentTimeMillis());
Date date2 = new Date(date2mills);
System.out.println(date1.before(date2));
System.out.println(date1.after(date2));
System.out.println(date1.compareTo(date2));
输出:
> true
> false
> -1
与之相比,它产生-1
,因为date1
在date2
之前
This在将字符串转换为日期时也可能会有所帮助,因此您不必直接处理毫秒值。