(A) 1. 验证时间戳的格式是否与期望的格式匹配。 CCYY-MM-DD'T'hh:mm:ss'.0000000000+'uh:um" 例如:期望的格式不是静态的。它可能是以下任何一种格式: "2013-09-10T18:30:20.123456+10:00" 或者 "2013-09-10T18:30:20.123+10:00"。 精度和值并不重要,只有格式很重要。
(B) 2. 验证时间戳是否在特定范围内。 例如:验证时间戳是否在“2013-09-10 18:27”和“2013-09-10 18:33”之间。(验证仅限于分钟级精度)(可能会有+/-2分钟的变化)
问题是如何使用Java类验证自定义时间戳的微秒精度?
这个类的两个参数将分别是:
1)期望的时间戳格式作为字符串
2)时间戳值作为字符串
根据来自各种搜索结果的分析,我了解到:
1. Java(默认情况下)不解析/格式化微秒级别的时间戳(我使用了SimpleDateFormat)。
2. 如果在毫秒数位置给出6位数字,它会重新计算出秒数,并更新日期格式,新的日期格式将具有3位毫秒级精度。
3. 我还看到一条线程建议使用java.sql.Timestamp。
尝试了这个方法但不起作用。我无法将我的strTimestamp 2013-09-10T18:30:20.123456+10:00转换为Timestamp对象。
Timestamp ts = Timestamp.valueOf(strTimestamp);
java.lang.IllegalArgumentException:
Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]
我无法将输入格式转换为时间戳对象。
我有一个使用正则表达式验证的解决方法:
2013-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])T(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):(0[0-9]|[1-5][0-9]).[0-9][0-9][0-9][0-9][0-9][0-9]\+10:00
这个正则表达式的问题在于,我期望的时间戳格式并不固定。因此我需要为每种模式使用一个正则表达式。
因此,我正在尝试找出是否有任何稳健的解决方案在Java中,即使期望的格式发生变化也可以自给自足。