Zee*_*Zee 2 java date simpledateformat date-formatting timezone-offset
我已经看到了很多关于这方面的资源,但我无法得到的一件事是在转换过程中转换毫秒时间戳时,我如何添加相应的时区。
Date date = new Date(Long.valueOf(dateInMil*1000L);
SimpleDateFormat myDate = new SimpleDateFormat("EEE, MMM d, ''yy");
String formatted = myDate.format(date);
Run Code Online (Sandbox Code Playgroud)
现在,如果我在字符串格式中有一个时区/偏移量,即“-04:00”或“+2:00”,如何将其应用于上述内容,以便获得正确的日期?
Instant.ofEpochMilli( myCountOfMilliseconds )
.atZone( ZoneId.of( "Africa/Tunis" ) )
.toString()
Run Code Online (Sandbox Code Playgroud)
现代方法使用java.time类而不是现在遗留的麻烦的旧Calendar/Date类。
假设您的毫秒计数是自UTC (1970-01-01T00:00)中 1970 年第一时刻的纪元参考以来的计数,然后解析为.Instant
该Instant级表示时间轴上的时刻UTC,分辨率为纳秒(最多小数的9个位数)。
Instant instant = Instant.ofEpochMilli( myCountOfMilliseconds ) ;
Run Code Online (Sandbox Code Playgroud)
要从UTC移动到另一个时区,请应用 aZoneId以获取ZonedDateTime.
以、、 或等格式指定正确的时区名称。永远不要使用 3-4 个字母的缩写,例如或因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。continent/regionAmerica/MontrealAfrica/CasablancaPacific/AucklandESTIST
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
Run Code Online (Sandbox Code Playgroud)
分配时区后,然后以您想要的格式(不是之前)生成一个字符串。您可能将日期时间值(对象)与以文本方式表示其值的字符串混为一谈。学会思考智能对象,而不是愚蠢的字符串。
DateTimeFormatter要生成特定格式的字符串,请使用DateTimeFormatter. 搜索堆栈溢出,因为这已经被多次覆盖,这里显示的其他概念也是如此。特别值得注意的是DateTimeFormatter.ofLocalized…方法。
该java.time框架是建立在Java 8和更高版本。这些类取代了麻烦的旧的遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规范是JSR 310。
从哪里获得 java.time 类?
该ThreeTen-额外项目与其他类扩展java.time。该项目是未来可能添加到 java.time 的试验场。你可能在这里找到一些有用的类,比如Interval,YearWeek,YearQuarter,和更多。
| 归档时间: |
|
| 查看次数: |
5018 次 |
| 最近记录: |