我有一个本地日期时间的字符串表示和一个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”来设置各个年/月/日/小时/分钟值的唯一解决方法吗?
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.Date
,Calendar
,
Joda-Time 项目现在处于维护模式,建议迁移到 java.time 类。
要了解更多信息,请参阅Oracle教程。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
使用符合JDBC 4.2或更高版本的JDBC驱动程序,您可以直接与数据库交换java.time对象。不需要字符串或java.sql.*类。
从哪里获得java.time类?
ThreeTen-Extra项目用额外的类扩展了java.time。这个项目是java.time未来可能增加的内容的试验场。您可能会在这里找到一些有用的类,如< code>Interval 、< code>YearWeek 、< code>YearQuarter等等。
日历 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时间,我正在使用: 那似乎行得通。当我的应