我的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