解析 DateFormat 时的 Java 时区

2024-03-20

我的代码解析日期如下:

String ALT_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
SimpleDateFormat sdf = new SimpleDateFormat(
                    ALT_DATE_TIME_FORMAT);
Date date = sdf.parse(requiredTimeStamp);

本来还好好的,突然就不行了。事实证明,管理员在服务器上进行了一些配置更改,并且日期当前返回为“2010-12-27T10:50:44.000-08:00”,上述模式无法解析该日期。我有两个问题:

第一个是哪种模式会解析 JVM 以上述格式返回的日期(具体来说,只是“-08:00”作为时区)?其次,在 Linux RHEL 5 服务器上到底应该在哪里更改此类设置,以便我们在将来了解此类更改?


tl;dr

OffsetDateTime.parse( "2010-12-27T10:50:44.000-08:00" )

ISO 8601

输入字符串格式定义在ISO 8601 https://stackoverflow.com/q/4542679/642706标准,一系列日期时间格式。

避免旧的日期时间类

问题和其他答案使用与最早版本的 Java 捆绑在一起的旧的过时日期时间类。避开他们。现在被 java.time 类取代。

使用java.time

您的输入字符串以与 UTC 的偏移量 https://en.wikipedia.org/wiki/UTC_offset。所以我们解析为OffsetDateTime http://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html object.

java.time 类在解析/生成字符串时默认使用 ISO 8601 格式。因此无需指定格式模式。

OffsetDateTime odt = OffsetDateTime.parse( "2010-12-27T10:50:44.000-08:00" );

如果您想将此日期时间值查看为 UTC 时间轴上的某个时刻,请提取Instant.

Instant instant = odt.toInstant();

时区是一个偏移量plus一组用于处理夏令时 (DST) 等异常情况的规则。如果您考虑了时区,请应用ZoneId得到一个ZonedDateTime目的。时间轴上的同一时刻,但通过不同的方式查看挂钟时间 https://en.wikipedia.org/wiki/Wall-clock_time.

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = odt.atZoneSameInstant( z );  // Same moment on the timeline, but viewed through a different wall-clock time.

About 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对象直接与您的数据库。用一个JDBC驱动程序 https://en.wikipedia.org/wiki/JDBC_driver符合JDBC 4.2 http://openjdk.java.net/jeps/170或稍后。不需要字符串,不需要java.sql.*类。

从哪里获取 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(使用前将#替换为@)

解析 DateFormat 时的 Java 时区 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 十进制到八进制的转换[重复]

    这个问题在这里已经有答案了 可能的重复 十进制转换错误 https stackoverflow com questions 13142977 decimal conversion error 我正在为一个类编写一个程序 并且在计算如何将八进
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤

随机推荐

  • 如何使用 JAVA API 在 Elasticsearch 版本 8 中创建批量 CRUD 操作请求?

    我们想要创造索引请求 删除请求 更新请求 and 批量请求 in Elasticsearch 版本 8 using JAVA API 但我在elasticsearch v8中没有看到任何java文档官方网站 https www elasti
  • Objective C 相当于 PHP 范围函数?

    我想快速创建一个从 0 到 10000 的数字数组 但步进增量为 500 数组如下所示 0 500 1000 10000 in PHP 这是内置于range http php net manual en function range php
  • 汇总分钟到小时的需求

    我不知道我是否在这个问题的正确部分 我环顾四周并没有找到答案 所以这是我的问题 我有一个 CSV 文件 订购如下 dat lt read csv text Date Demand 01 01 2012 00 00 00 5061 5 01
  • conda.exe:加载共享库时出错:libz.so.1

    无法在我的 RHEL 机器中安装 Anaconda3 2019 10 Linux x86 64 收到错误 gt conda exe 加载共享库时出错 libz so 1 无法从共享对象映射段 不允许操作 Anaconda 或 Minicon
  • 为什么我的排除字段仍然出现在这个 Django 表单中?

    我在用着exclude在我的表单的 Meta 类中 从表单中排除我想以编程方式填写的字段 但它仍然显示在表单中 以下是代码的一些摘录 Model class Info models Model completed by models For
  • 在linux中链接信号处理程序的正确方法?

    我有几个信号处理程序用来干净地退出程序 并且我想通过链接信号处理程序调用来很好地处理任何其他吸引它们的东西 我在手册页中使用 sigaction 作为信号 表示它不再是首选 查看 sigaction 结构体 其中指定了信号掩码等 以及几个标
  • 内部使用 try catch 防止 C++ DLL 异常

    我正在开发一个 C DLL 为主应用程序分配一个数组 该函数返回错误代码 而不是指向新创建的数组的指针 因此第一个成员的地址将写入函数的参数中 例子 int foo int arrayPtr int array new int 10 arr
  • 如何打破长字符串以符合 PEP8 要求? [复制]

    这个问题在这里已经有答案了 我的项目中有很多这样的长线 但不知道如何打破它以使 PEP8 满意 PEP8 显示警告 format me id pic url http graph facebook com 0 picture width 1
  • Visual Studio 需要在 Team City Build Server 上运行 MSTest 测试吗?

    我们正在设置 Team City 构建服务器 在以前的 VS 2008 项目中 完整版本的 Visual Studio 已安装在构建服务器上 我们现在正在启动一个 VS 2010 项目 是否可以在不安装 Visual Studio 的情况下
  • 如何在 Windows 上从 GitHub Desktop 更新 git 版本

    我想用新的worktree中引入的功能git 2 5 https git scm com docs git worktree 但是 我不知道如何更新到最新版本的 GitHub Desktop notgit 本身 我安装桌面版 GitHub
  • JTable 行之间的标题

    我想知道如何实现这样的事情 row 1 row 2 HEADLINE比如 2011 年 1 月 27 日 row 3 row 4 HEADLINE比如 2011 年 1 月 28 日 row 5 这些 假 行应该只是信息行而不是真实行 我找
  • 如何在C#中获取当前产品版本?

    如何在 C 中以编程方式获取当前产品版本 My code VersionNumber System Reflection Assembly GetExecutingAssembly GetName Version ToString 我得到
  • 什么是textview.setTextSize()?

    在我的 Android 游戏中 有一个文本视图 我使用以下代码设置文本大小 textview setTextSize 30 30以像素为单位 但它到底是什么 是字符的高度还是宽度 是序数号吗 在android java或kotlin 中设置
  • WPF - 宽度和高度必须为非负数

    我的应用程序遇到了一个奇怪的异常 它一直运行良好 直到我升级了我的开发机器 相同的操作系统 VS2010 并尝试再次调试软件 这是我得到的异常 宽度和高度必须为非负数 堆栈跟踪在这里 at System Windows Size ctor
  • 使用 babel 后,'Symbol' 在 IE 中未定义

    我有一个reactjs使用 ES6 标准编写的应用程序 我使用webpack来建造它 这webpack加载js模块使用babel loader 具体来说 我使用以下版本的包 email protected cdn cgi l email p
  • OpenCV - 如何从 Canny 函数的结果中提取边缘?

    我在 OpenCV 中使用 Canny 函数 如下所示 Mat detected edges GetImage Canny detected edges detected edges 20 20 3 kernel size 我的问题是这个函
  • 在 C++ 中将对象数组设置为 null

    假设我有一个 C 中 Foo 类型的对象数组 Foo array 10 在 Java 中 我可以简单地通过以下方式将此数组中的对象设置为 null array 0 null the first one 我怎样才能在 C 中做到这一点 使用指
  • PHPStorm中Code Sniffer触发的Xdebug

    我在安装 PHPStorm 时 xdebug 和 Code Sniffer 都工作得很好 但真正烦人的部分是 调试器现在似乎将 Code Sniffer 错误视为断点 并中断代码 让我知道样式警告 尝试测试代码 如何防止 Code Snif
  • Firestore存储大小限制如何存储大型数组

    我有一个收藏users userID followers该用户 ID 是 firebase UID 因此长度为 29 个字节 字符串大小的计算方式为 UTF 8 编码字节数 1 在每个用户文档中 我都有一个名为 follower 的数组和另
  • 解析 DateFormat 时的 Java 时区

    我的代码解析日期如下 String ALT DATE TIME FORMAT yyyy MM dd T HH mm ss SSSZ SimpleDateFormat sdf new SimpleDateFormat ALT DATE TIM