java - 如何检查日历实例最初是否是错误的日期

2024-02-24

我有一个 Calendar 实例,通过以下方式从 XSD 日期时间解析javax.xml.bind.DatatypeConverter.parseDateTime http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/DatatypeConverter.html#parseDateTime(java.lang.String)JAXB 方法。

在运行时,我在一个网络服务中,我想知道原始的 xsd 日期时间是否有效(月 2015-07-30T09:32:05.543+02:00这不是:2015-07-35T09:32:05.543+02:00

我尝试使用setLenient http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#setLenient(boolean)在网络服务中的实例上,但当原始日期错误时它似乎不会引发异常。

有什么办法可以做到吗?我的猜测是告诉 JAXB 以正确的方式进行操作global.jaxb文件,这是我现在使用的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings version="2.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema"
               jaxb:extensionBindingPrefixes="xjc">
    <jaxb:globalBindings>
        <xjc:simple/>
        <xjc:serializable uid="-1"/>
        <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime"
                       parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
                       printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/>
    </jaxb:globalBindings>
</jaxb:bindings>

任何帮助,将不胜感激。谢谢。


tl;dr

OffsetDateTime.parse( "2015-07-35T09:32:05.543+02:00" ) 
    … catch ( DateTimeParseException e )

java.time

麻烦的旧日期时间类,例如java.util.Date https://docs.oracle.com/javase/9/docs/api/java/util/Date.html, java.util.Calendar https://docs.oracle.com/javase/9/docs/api/java/util/Calendar.html, and java.text.SimpleDateFormat现在legacy https://en.wikipedia.org/wiki/Legacy_system,被取代java.time https://docs.oracle.com/javase/9/docs/api/java/time/package-summary.htmlJava 8 和 Java 9 中内置的类。

同样,乔达时间 http://www.joda.org/joda-time/项目现已在维护模式 https://en.wikipedia.org/wiki/Maintenance_mode,团队建议迁移到java.time http://docs.oracle.com/javase/9/docs/api/java/time/package-summary.html类。

OffsetDateTime & DateTimeParseException

要确定无效的日期时间字符串,请尝试解析并捕获异常。鉴于您的输入具有相对于 UTC 的偏移量,但没有时区,请解析为OffsetDateTime https://docs.oracle.com/javase/9/docs/api/java/time/OffsetDateTime.html对象。无效输入抛出DateTimeParseException https://docs.oracle.com/javase/9/docs/api/java/time/format/DateTimeParseException.html.

String inputGood = "2015-07-30T09:32:05.543+02:00" ;
String inputBad = "2015-07-35T09:32:05.543+02:00" ;

try{ 
    // Good
    OffsetDateTime odtGood = OffsetDateTime.parse( inputGood ) ;
    System.out.println( "odtGood.toString(): " + odtGood ) ;

    // Bad
    OffsetDateTime odtBad = OffsetDateTime.parse( inputBad ) ;
    System.out.println( "odtBad.toString(): " + odtBad ) ;
} catch ( DateTimeParseException e ) {
    System.out.println( e ) ;
}

See 代码在 IdeOne.com 上实时运行 https://ideone.com/DYNUUF.

odtGood.toString(): 2015-07-30T09:32:05.543+02:00

java.time.format.DateTimeParseException:无法解析文本'2015-07-35T09:32:05.543 + 02:00':DayOfMonth的值无效(有效值1 - 28/31):35


关于 java.time

The java.time http://docs.oracle.com/javase/9/docs/api/java/time/package-summary.html框架内置于 Java 8 及更高版本中。这些课程取代了麻烦的旧课程legacy https://en.wikipedia.org/wiki/Legacy_system日期时间类,例如java.util.Date https://docs.oracle.com/javase/9/docs/api/java/util/Date.html, Calendar https://docs.oracle.com/javase/9/docs/api/java/util/Calendar.html, & SimpleDateFormat http://docs.oracle.com/javase/9/docs/api/java/text/SimpleDateFormat.html.

The 乔达时间 http://www.joda.org/joda-time/项目,现在在维护模式 https://en.wikipedia.org/wiki/Maintenance_mode,建议迁移到java.time http://docs.oracle.com/javase/9/docs/api/java/time/package-summary.html类。

要了解更多信息,请参阅甲骨文教程 http://docs.oracle.com/javase/tutorial/datetime/TOC.html。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310 https://jcp.org/en/jsr/detail?id=310.

从哪里获取 java.time 类?

  • Java SE 8 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_8, Java SE 9 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_9, and later
    • 内置。
    • 具有捆绑实现的标准 Java API 的一部分。
    • Java 9 添加了一些小功能和修复。
  • Java SE 6 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_6 and Java SE 7 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_7
    • 许多 java.time 功能都向后移植到 Java 6 和 7三十后端口 http://www.threeten.org/threetenbp/.
  • Android https://en.wikipedia.org/wiki/Android_(operating_system)
    • 更高版本的 Android 捆绑了 java.time 类的实现。
    • 对于早期的 Android,三十ABP https://github.com/JakeWharton/ThreeTenABP项目适应三十后端口(上文提到的)。看如何使用 ThreeTenABP... http://stackoverflow.com/q/38922754/642706.

The 三十额外 http://www.threeten.org/threeten-extra/项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如Interval http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/Interval.html, YearWeek http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/YearWeek.html, YearQuarter http://www.threeten.org/threeten-extra/apidocs/org/threeten/extra/YearQuarter.html, and more http://www.threeten.org/threeten-extra/apidocs/index.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java - 如何检查日历实例最初是否是错误的日期 的相关文章

随机推荐

  • 替换 javascript 数组中的字符串

    我有一个 JavaScript 数组 该数组包含包含逗号 的字符串 我希望从此数组中删除所有逗号 这可以做到吗 Yes for var i 0 i lt arr length i arr i arr i replace g
  • CSS 模块 @import 未能通过 Jest 测试套件

    我正在使用 Jest 和 Enzyme 来测试我的应用程序 我收到错误 FAIL app containers Navbar NavbarContainer test js Test suite failed to run app comp
  • 在 Perl 中读取文件时如何跳过行?

    我怎样才能做到这一点 open FILE somefile foreach
  • 为每根树枝设置翻译域

    我有一些树枝包括需要翻译的文本 目前我把这句话放在每根树枝上 trans default domain AcmeTopBundle 不过 这有点麻烦 有没有一种好方法可以为一个地方的每根树枝设置默认域 可以在原来的基础上写一个自定义的节点访
  • 没有自动换行的多行 UILabel?

    是否有可能有一个UILabel由多个组成 n 分隔行的行宽度 gt 标签宽度被截断而不是换行 假设我有一些如下所示的文本 这是一个非常长的第一行文本 太长而无法水平放置 短线 又一条短线 我希望这个出现在我的UILabel像这样 1 Thi
  • 无法导出 const 箭头函数

    ES6 新手 我试图制作一个像这样的 React 简单功能组件 Todo jsx export default const Todo todos onTodoClick gt ul todos map todo i gt li gt onT
  • 将 ArrayList 转换为 JSON - Android

    我有一个数组列表和一个单独的字符串 我想将它们转换为 JSON 格式并期望它低于 json 格式 预期格式 last sync date 2014 06 30 04 47 45 recordset contact group guid y3
  • 在 Rstudio 中使用 gtsummary 计算缺失值的百分比

    我的问题有点类似于这个one https stackoverflow com questions 63640473 calculate percent from total observations in r gtsummarytbl su
  • XSl:Variable - 检查值是否存在的条件

    使用XSLT 1 0 如何检查变量中的值是否存在 我最初从 XML 数据将值分配给变量 然后需要检查它是否存在
  • 查找数组的最大切片 | JavaScript

    我需要找到包含不超过两个不同数字的数组的最大切片 这是我的数组 1 1 1 2 2 2 1 1 2 2 6 2 1 8 我对此的思考过程是找到不重复的数字并在新数组中返回它们的索引 这是我到目前为止所拥有的 function goThrou
  • 在 Python 的 sqlite3 中使用外键

    我正在编写一个通过 python 创建 sqlite3 数据库的程序 我有一个作者表 AuthorID Name 和第二个图书表 BookID Title AuthorID 我创建的这些表如下所示 Authors sqlite3 conne
  • Twitter Bootstrap 3.0 行比窗口宽

    我正在摆弄 Twitter Bootstrap 并注意到我的 row比屏幕长度更宽 这里是example http bootply com 90307 当 bootstrap 3 0 出来时我没有经历过这个 右侧的额外空间来自margin
  • 如何检测WKWebView中的hash变化?

    我有一个使用 javascript 的网站 它使用 Angular 来控制您在网站上看到的内容 所以http somewebsite com page1 http somewebsite com page1显示 当您单击位置更改为的选项卡时
  • 用于计算矩阵指数的 C++ 库

    对于实现矩阵指数计算的库有什么建议吗 Expokit http www maths uq edu au expokit 用 Fortran 编写 但可以嵌入 C 中 它工作得很好 并且包含稀疏矩阵的优化算法
  • 如何检查文件是否包含纯文本?

    我有一个装满文件的文件夹 我想搜索其中的一些字符串 问题是有些文件可能是 zip exe ogg 等 我可以以某种方式检查它是什么类型的文件 所以我只打开并搜索 txt PHP 等文件 我不能依赖文件扩展名 使用Python的mimetyp
  • React Native - Expo:fontFamily“SimpleLineIcons”不是系统字体,尚未通过 Font.loadAsync 加载

    所以我在 Android 设备 模拟器上收到此错误 另一方面 在 iOS 上 它编译得很好 并且simple line icons都可以正确显示 我正在运行最新版本的expo 我的package json name FamScore3 ve
  • Rapidjson 使用 JSON 字符串作为编写器的输入进行漂亮打印

    下列的rapidjson 文档 http rapidjson org md doc sax html Writer我能够以逐个键的方式生成漂亮打印的 JSON 输出 例如 rapidjson StringBuffer s rapidjson
  • 如何使用多个 Google 文件选择器处理回电

    如果我在一页上有多个 Google 云端硬盘文件选择器 我该如何处理回调以确保数据传递到正确的部分 我基本上列出了许多项目 每个项目都有一个链接到文件选择器的选择文件按钮 所有示例都只是将数据传递回同一个位置 但我需要每个请求的数据都不同
  • 无法通过 http 克隆 git 存储库;未找到信息/参考文献

    我正在尝试使 git 存储库可通过 http 进行只读访问 我用老式的方式来做 因为git http backend在我的主机系统上不可用 也就是说 我只是将裸存储库放在 http 可访问的位置 我使用以下命令在主机上成功创建了裸存储库gi
  • java - 如何检查日历实例最初是否是错误的日期

    我有一个 Calendar 实例 通过以下方式从 XSD 日期时间解析javax xml bind DatatypeConverter parseDateTime http docs oracle com javase 7 docs api