【问题标题】:Java : Custom Timestamp Format : Verify value range to minute precisionJava:自定义时间戳格式:验证值范围到分钟精度
【发布时间】:2013-09-16 05:39:23
【问题描述】:

我的目标是 创建一个可以处理以下两个要求的java类

(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”之间。 (验证仅达到分钟级精度)(可能是 + 或 - 2min 的增量)

关于第一个目标的问题已发布在这里 Java : Custom Timestamp Format : verify format to microsec precision

关于第二个目标: 问题:

如何使用 Java 类验证时间戳是否在给定的分钟精度范围内?

类的输入将是三个参数

  1. 作为字符串验证的时间戳
  2. 字符串形式的下限时间戳
  3. 字符串形式的更大范围时间戳。

我试过了

String date = "2013-09-10T18:30:12.123456789+10:00"
SimpleDateFormat df2 = new SimpleDateFormat("yyyyMMddHHmm"); 
date = date.substring(0,22)+"+10:00"; 
Date newDate = df.parse(date); 
timestamp_value = df2.format(newDate);

timestamp_value 现在是 201309101830
检查 timestamp_value 是否大于 201309101827。
检查 timestamp_value 是否小于 201309101833
没关系。

但是,我觉得这是一种粗略的实现方式,所以我想知道是否有更好的解决方案。 如果我可以转换为 Timestamp 对象,我认为 .before 和 .after 可以提供帮助。有什么建议吗?

【问题讨论】:

    标签: java timestamp


    【解决方案1】:

    1) "2013-09-10T18:30:20.123+10:00" 是 XSD dateTime 格式,最好的解析方式是这样

    XMLGregorianCalendar xgc = javax.xml.datatype.DatatypeFactory.newInstance().newXMLGregorianCalendar(date);
    

    如果日期格式错误,将抛出 IllegalArgumentException

    2) 验证时间戳是否在一定范围内,最简单的方法是从日期获取毫秒,截断为分钟并使用算术比较t >= from - delta && t <= to + delta

    【讨论】:

    • 关于XMLGregorianCalendar,如果日期格式不正确会抛出异常。但它也可以验证给定日期是否符合我的预期格式?
    • 因为,我不需要在秒精度后验证范围,我可以使用 XMLGregorianCalendar 将自定义格式化字符串转换为 java.util.Date,然后使用 getTime() 转换为 long ;一旦我将所有三个日期都以毫秒为单位,我正在做一个算术比较
    • 简单得多:GregorianCalendar gc = xgc.toGregorianCalendar(); gc.getTimeInMillis();
    • 是的,看起来更简单 long value = xgc.toGregorianCalendar().getTimeInMillis();
    猜你喜欢
    • 2013-09-20
    • 2011-06-03
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    相关资源
    最近更新 更多