具有String参数的方法仅接受手动设置的String

时间:2019-07-14 15:35:33

标签: java

我的代码有问题,我使用字符串(“ 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);
    }

2 个答案:

答案 0 :(得分:2)

您没有提供足够的详细信息来诊断问题。但我可以为您提供正确方法的简单代码示例。

ISO 8601

首先,尽可能使用ISO 8601标准格式将日期时间值序列化为人类可读的文本。对于日期为YYYY-MM-DD。

LocalDate

如果无法使用ISO 8601格式,请使用格式设置样式来定义DateTimeFormatter以匹配您的输入。然后解析为LocalDateLocalDate类表示没有日期,没有time zoneoffset-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::isBeforeisAfterisEqual

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,因为date1date2之前

This在将字符串转换为日期时也可能会有所帮助,因此您不必直接处理毫秒值。