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 的日期。
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 ) ;
智能对象,而不是愚蠢的字符串
别再执着于弦了。您应该传递适当类型的对象,而不仅仅是字符串。这样做将使您的代码更具自文档性,提供类型安全性,确保有效值并减少错误的可能性。
将您的参数类型从 更改String
为LocalDate
。
推荐阅读
- api - 如何在 Postman 的 POST 请求中传递数据数组?
- python - 如何在python中将字符串转换为时间
- vue.js - 为什么我无法在 vue 中访问 html canvas?
- javascript - 每个 then() 都应该在 firebase 云函数中返回一个值或抛出错误
- c - 如何将预排序的 AVL 树键号放入 C 中的数组中
- html - 如何将表单提交数据推送到数组
- f# - F# 额外参数 List.map
- react-native - 在 react-native 上使用钩子
- javascript - Promise 在调用时返回值而不是 Promise
- google-chrome-extension - 仅在网站的特定文件夹上执行 chrome 扩展