解析 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 的 Apache Http 摘要身份验证

    我目前正在开发一个 Java 项目 但无法使 http 摘要身份验证正常工作 我尝试使用 Apache 网站 但没有帮助 我有一个需要 HTTP 摘要身份验证的网站 DefaultHttpClient httpclient new Defa
  • java中监视目录变化

    我正在使用 WatchService 来监视目录中的更改 特别是目录中新文件的创建 下面是我的代码 package watcher import java nio file import static java nio file Stand
  • Thymeleaf 3 Spring 5 映射加载字符串而不是 HTML

    我正在尝试将 Spring 5 和 Thymeleaf 3 一起配置 我正在 Eclipse 上工作 我使用 全新安装 构建并使用 springboot run 运行应用程序 我已经设置了一个控制器和几个模板 但 Thymeleaf 似乎找
  • 如何在 JPQL 或 HQL 中进行限制查询?

    在 Hibernate 3 中 有没有办法在 HQL 中执行相当于以下 MySQL 限制的操作 select from a table order by a table column desc limit 0 20 如果可能的话 我不想使用
  • 将巨大的模式编译成Java

    有两个主要工具提供了将 XSD 模式编译为 Java 的方法 xmlbeans 和 JAXB 问题是 XSD 模式确实很大 30MB 的 XML 文件 大部分模式在我的项目中没有使用 所以我可以注释掉大部分代码 但这不是一个好的解决方案 目
  • Runtime.exec 处理包含多个空格的参数

    我怎样才能进行以下运行 public class ExecTest public static void main String args try Notice the multiple spaces in the argument Str
  • 提供节点名或服务名,或未知 Java

    最近我尝试运行我的 Java 项目 每当我运行它并将其打开到我得到的服务器地址时 Unable to determine host name java net UnknownHostException Caused by java net
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • 如何检查某个元素是否存在于一组项目中?

    In an ifJava中的语句如何检查一个对象是否存在于一组项目中 例如 在这种情况下 我需要验证水果是苹果 橙子还是香蕉 if fruitname in APPLE ORANGES GRAPES Do something 这是一件非常微
  • 如何在 Spring 中使 @PropertyResource 优先于任何其他 application.properties ?

    我正在尝试在类路径之外添加外部配置属性资源 它应该覆盖任何现有的属性 但以下方法不起作用 SpringBootApplication PropertySource d app properties public class MyClass
  • 如何在 ant 中为 junit 测试设置 file.encoding?

    我还没有完全完成file encoding 和 ant https stackoverflow com questions 1339352 how do i set dfile encoding within ants build xml
  • 从jar中获取资源

    我有包含文件的 jar myJar res endingRule txt myJar wordcalculator merger Marge class 在 Marge java 中我有代码 private static final Str
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • Java继承,扩展类如何影响实际类

    我正在查看 Sun 认证学习指南 其中有一段描述了最终修饰符 它说 如果程序员可以自由地扩展我们所知的 String 类文明 它可能会崩溃 他什么意思 如果可以扩展 String 类 我是否不会有一个名为 MyString 的类继承所有 S
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • 使用 Elastic Beanstalk 进行 Logback

    我在使用 Elastic Beanstalk 记录应用程序日志时遇到问题 我正在 AWS Elastic Beanstalk 上的 Tomcat 8 5 with Corretto 11 running on 64bit Amazon Li
  • 在java中以原子方式获取多个锁

    我有以下代码 注意 为了可读性 我尽可能简化了代码 如果我忘记了任何关键部分 请告诉我 public class User private Relations relations public User relations new Rela
  • partitioningBy 必须生成一个包含 true 和 false 条目的映射吗?

    The 分区依据 https docs oracle com javase 8 docs api java util stream Collectors html partitioningBy java util function Pred
  • 子类构造函数(JAVA)中的重写函数[重复]

    这个问题在这里已经有答案了 为什么在派生类构造函数中调用超类构造函数时 id 0 当创建子对象时 什么时候在堆中为该对象分配内存 在基类构造函数运行之后还是之前 class Parent int id 10 Parent meth void
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v

随机推荐

  • 如何使用 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