我有一个本地日期时间的字符串表示,以及一个Java TimeZone。
我正在尝试以MM / dd / yyyy HH:mm:ssZ格式输出,但我无法弄清楚如何使用正确的日期时间和时区创建Calendar或JodaTime对象。如何将TimeZone转换为可由SimpleDateFormat' 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 DateTime的唯一解决方法,并通过解析字符串" 08/14/2014 15:00:00"来设置单个年/月/日/小时/分钟值。 ?
答案 0 :(得分:1)
日历getTime()
- 返回一个Date对象,表示此Calendar的时间值(距Epoch(01-01-1970 00:00 GMT)"毫秒的偏移量),无论您在哪个时区正在展示。但是在不同TimeZone中的一天中的时间会有所不同。 get(Calendar.HOUR_OF_DAY)
你应该试试
sdfZ.setTimeZone(tz);
答案 1 :(得分:0)
ZonedDateTime zdt = ZonedDateTime.now( ZoneId.of( "America/Chicago" ) ) ;
String output = zdt.toInstant().toString() ;
2016-12-03T10:15:30Z
java.util.Calendar类和Joda-Time库都已被java.time类取代。
Instant
Instant
类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds。
Instant instant = Instant.now();
调用toString
以标准ISO 8601格式生成字符串。例如,2011-12-03T10:15:30Z
。此格式适用于序列化数据存储或交换的日期时间值。
String output = instant.toString(); // Ex: 2011-12-03T10:15:30Z
指定时区。
ZoneId z = ZoneId.of( "America/Chicago" );
ZonedDateTime zdt = instant.atZone( z );
作为快捷方式,您可以跳过使用Instant
。
ZonedDateTime zdt = ZonedDateTime.now( z );
在toString
上调用ZonedDateTime
可获得标准ISO 8601格式的扩展版本,其中时区的名称附加在方括号中。例如,2007-12-03T10:15:30+01:00[Europe/Paris]
。
String output = zdt.toString(); // Ex: 2007-12-03T10:15:30+01:00[Europe/Paris]
DateTimeFormatter
DateTimeFormatter
类有一个预定义的格式化程序常量,用于所需的输出:DateTimeFormatter.ISO_LOCAL_DATE_TIME
String output zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME );
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
如果JDBC driver符合JDBC 4.2或更高版本,您可以直接与数据库交换 java.time 对象。不需要字符串或java.sql。* classes。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。