首页 > 解决方案 > 带字符串参数的方法只接受手动设置的字符串

问题描述

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

标签: java

解决方案


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

ISO 8601

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

LocalDate

如果无法使用 ISO 8601 格式,DateTimeFormatter请使用格式模式定义 to 以匹配您的输入。然后解析为LocalDate. 该类LocalDate表示没有时间、没有时区从 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 ) ;

智能对象,而不是愚蠢的字符串

别再执着于弦了。您应该传递适当类型的对象,而不仅仅是字符串。这样做将使您的代码更具自文档性,提供类型安全性,确保有效值并减少错误的可能性。

将您的参数类型从 更改StringLocalDate


推荐阅读