java - 带有 String 参数的方法仅接受手动设置的 String

标签 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);
    }

最佳答案

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

ISO 8601

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

本地日期

如果无法使用 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

关于java - 带有 String 参数的方法仅接受手动设置的 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57028796/

相关文章:

java - 如何在单击抽屉导航项目时显示 viewpager 的选项卡而不重叠?

java - 编写java脚本: Create a class in a script file

java - Uberjar 通过 eclipse ?

java - 正则表达式字符类双重否定中的错误?

java - 尽管执行的 SQL 返回值,但 Hibernate 返回空值列表

java - Webview里面弹出窗口android

java - 无法发送邮件 - javax.net.ssl.SSLException : Unrecognized SSL message, 纯文本连接?

java - SQLite JDBC Connection.preparedStatement 中的 NullPointerException

java - Android - 下拉菜单

java - 如何编写单元测试用例或 Mock Retrofit