Ret*_*ner 0 java java-8 localdate
问题:您如何处理这些用例?
在日常业务中,我经常需要检查日期 a <= 日期 b 或日期 a >= 日期 b。
互联网经常建议使用 isBefore/isAfter 方法的否定版本。
在实践中我发现我
我想我的一部分仍然希望我只是忽略了 API 中的相应方法(请!)。
/**
* @return true if candidate >= reference </br>
* or in other words: <code>candidate.equals(reference) || candidate.isAfter(reference)</code> </br>
* or in other words: <code>!candidate.isBefore(reference) </br>
* or in other words: <code>candidate.compareTo(reference) >= 0
*/
public static boolean isEqualOrAfter(LocalDate candidate, LocalDate reference)
{
return !candidate.isBefore(reference);
}
/**
* @return true if candidate <= reference </br>
* or in other words: <code>candidate.equals(reference) || candidate.isBefore(reference)</code> </br>
* or in other words: <code>!candidate.isAfter(reference) </br>
* or in other words: <code>candidate.compareTo(reference) <= 0
*/
public static boolean isEqualOrBefore(LocalDate candidate, LocalDate reference)
{
return !candidate.isAfter(reference);
}
Run Code Online (Sandbox Code Playgroud)
编辑:正如 Andreas 所建议的,我添加了带有compareTo方法的版本,我希望我做对了(没有测试)。
编辑 2:示例:
// Manager says: "Show me everything from 3 days ago or later" or "show me everything that's at most 3 days old"
for(Item item : items) {
// negation idiom
if(!item.getDate().isBefore(LocalDate.now().minusDays(3))) {
// show
}
// compareTo idiom
if(item.getDate().compareTo(LocalDate.now().minusDays(3)) >= 0) {
// show
}
// desired
if(item.getDate().isEqualOrAfter(LocalDate.now().minusDays(3))) {
// show
}
}
Run Code Online (Sandbox Code Playgroud)
你寻求的方法是不必要的。这就是你的做法:
isEqualOrBefore == !isAfter
isEqualOrAfter == !isBefore
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |