如何验证普通日期



我的julian日期是7位数的YYYYDDD格式。我想确保闰年的所有场景都应该涵盖在内。目前,我已对天数进行了检查。是否有任何实用程序对其进行验证?

普通日期

"儒略"是一个用词不当的日期,用一年中的某一天来表示序号日期是一个更好的名称。

这个用词不当会引起混淆,因为序号日期与儒略历无关。这个用词不当可能是由于对天文学中使用的儒略日计数的误解。

DateTimeFormatter

使用自定义格式定义DateTimeFormatter。在您的自定义格式模式中,使用三个大写字母D,DDD表示年份编号。

尝试分析字符串输入。DateTimeParseException的陷阱。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuuDDD" ) ;
try
{
LocalDate ld = LocalDate.parse( input ) ;
} 
catch ( DateTimeParseException e )
{
// handle faulty input
}

ISO 8601

我建议您向数据发布者介绍ISO 8601格式。序号日期的标准格式为8个字符,在年份和年月日之间使用连字符。DateTimeFormatter类将该格式定义为常量:ISO_ORDINAL_DATE。我强烈建议您在以文本形式交换日期-时间值时坚持使用ISO 8601格式。

有关更多解释,请参阅我对类似问题的详细回答。

我想确保闰年的所有场景都应该涵盖在内。目前,我已对天数进行了检查。是否有任何实用程序正在验证它

是的,只需使用模式将字符串格式化为LocalDate,解析API将自动考虑uuuuDDD和闰年。

演示:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
// The 100th day of the year, 2020
String strDate1 = "2020100";
// The 100th day of the year, 2019
String strDate2 = "2019100";
// Notice 'D' (day-of-year) instead of 'd' (day-of-month)
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuuDDD");
LocalDate date1 = LocalDate.parse(strDate1, dtf);
LocalDate date2 = LocalDate.parse(strDate2, dtf);
System.out.println(date1);
System.out.println(date2);
}
}

输出:

2020-04-09
2019-04-10

相关内容

  • 没有找到相关文章

最新更新