当前位置: 首页 > 知识库问答 >
问题:

日期时间字符串时区

慕弘伟
2023-03-14

我有一个本地日期时间的字符串表示和一个Java时区。

我正在尝试以 MM/dd/yyyy HH:mm:ssZ 格式获取输出,但我无法弄清楚如何使用正确的日期时间和时区创建日历或 JodaTime 对象。如何将时区转换为可以通过简单日期格式“Z”或“z”解析的值?

TimeZone tz = TimeZone.getTimeZone("America/Chicago");
String startDate = "08/14/2014 15:00:00";

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Calendar cal = Calendar.getInstance(tz);
cal.setTime(sdf.parse(startDate));
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ssZ");

sdfZ.format(cal.getTime()) 

返回

08/14/2014 15:00:00-0400

这是 EST

是创建日历或Joda日期时间并通过解析字符串“08/14/2014 15:00:00”来设置各个年/月/日/小时/分钟值的唯一解决方法吗?

共有2个答案

石喜
2023-03-14
ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Chicago" ) ) ;
String output = zdt.toInstant().toString() ;

2016年12月3日10:15:30Z

java.util.Calendar 类和 Joda-Time 库都被 java.time 类取代。

< code>Instant类表示UTC时间线上的一个时刻,分辨率为纳秒。

Instant instant = Instant.now(); 

调用<code>toString</code>生成标准ISO 8601格式的字符串。例如,2011-12-03T10:15:30Z。这种格式很适合序列化数据html" target="_blank">存储或交换的日期时间值。

String output = instant.toString();  // Ex: 2011-12-03T10:15:30Z

分配时区。

ZoneId z = ZoneId.of( "America/Chicago" );
ZonedDateTime zdt = instant.atZone( z );

作为快捷方式,您可以使用即时跳过。

ZonedDateTime zdt = ZonedDateTime.now( z );

ZonedDateTime 上调用 toString 会得到标准 ISO 8601 格式的扩展版本,其中时区的名称附加在方括号中。例如,2007-12-03T10:15:30 01:00[欧洲/巴黎]。

String output = zdt.toString(); //  Ex: 2007-12-03T10:15:30+01:00[Europe/Paris]

< code>DateTimeFormatter类为您所需的输出提供了一个预定义的格式化程序常量:< code>DateTimeFormatter。ISO_LOCAL_DATE_TIME

String output zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME );

java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧旧日期时间类,如java.util.DateCalendar

Joda-Time 项目现在处于维护模式,建议迁移到 java.time 类。

要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。

使用符合JDBC 4.2或更高版本的JDBC驱动程序,您可以直接与数据库交换java.time对象。不需要字符串或java.sql.*类。

从哪里获得java.time类?

    < li>Java SE 8、Java SE 9和更高版本 < ul > < li >内置。 < li >捆绑实现的标准Java API的一部分。 < li>Java 9增加了一些小功能和修复。
  • 大部分java。时间功能后移植到Java 6
  • java.time 类的 Android 捆绑包实现的更高版本。
  • 对于早期的Android,ThreeTenABP项目适应了ThreeTen-Backport(如上所述)。了解如何使用ThreeTenABP。

ThreeTen-Extra项目用额外的类扩展了java.time。这个项目是java.time未来可能增加的内容的试验场。您可能会在这里找到一些有用的类,如< code>Interval 、< code>YearWeek 、< code>YearQuarter等等。

姬温文
2023-03-14

日历 getTime() - 返回一个 Date 对象,表示此日历的时间值(与纪元 (01-01-1970 00:00 GMT) 的毫秒偏移量),而不考虑显示哪个时区。但是不同时区的一天中的时间会有所不同。获取(Calendar.HOUR_OF_DAY)

你应该试试

sdfZ.setTimeZone(tz);
 类似资料:
  • 问题内容: 我有一个来自json响应的字符串: 如何将此字符串转换为Java DateTime对象? 我尝试使用以下内容: 但与此我只能创建一个日期对象。但是绑定在字符串中的时间还是很重要的。 任何帮助是极大的赞赏! 问题答案: 您可以从Java Date对象创建Joda DateTime对象,因为Java没有类。 尽管Java类也保存时间信息(这是您首先需要的信息),但我还是建议您使用a 代替J

  • 本实例演示了如何通过DateFormat类的parse方法根据不同的本地环境解析日期/时间字符串,并将其转换成Date对象。在最后还演示了parse方法如何解析不符合日期/时间逻辑的字符串。 例子 : 解析日期/时间字符串 实例的代码如下: package chapter8; import java.text.DateFormat; import java.util.Date; import ja

  • 问题内容: 我有一个类似的字符串 。我想将该字符串拆分为单独的变量,例如 这可能吗?如果是这样,我该怎么办? 问题答案: 一种方法是将其解析为日期对象,然后重新格式化: 如果您只想将其切成日期时间片段,只需使用split来获取片段 要么

  • 问题内容: 我有一个日期字符串,想要将其转换为日期类型: 我尝试将datetime.datetime.strptime与所需的格式一起使用,但它会返回转换时间。 这是输出返回的内容: 我需要删除时间:00:00:00。 问题答案: 您想要的是datetime.date对象。您拥有的是一个datetime.datetime对象。您可以按照以上说明进行打印时更改对象,或者在创建对象时执行以下操作:

  • 我有一个格式化的字符串日期 2020/04/16 (年/月/日) 我想把这个字符串解析成日期时间 显然不起作用,没有正确的日期格式。 有人知道把这个字符串解析成日期时间的最好方法是什么吗?

  • 问题内容: 我从来没有不得不将时间与UTC转换。最近有人要求我的应用注意时区,并且我一直在圈子里奔波。我发现很多有关将本地时间转换为UTC的信息,这很基本(也许我也做错了),但是我找不到任何有关将UTC时间轻松转换为最终用户时区的信息。 简而言之,android应用程序向我发送了(appengine应用程序)数据,该数据中包含时间戳。要将时间戳存储为UTC时间,我正在使用: 那似乎行得通。当我的应