我正在尝试使用 Java 读取 CST 时区的系统日期。我尝试了下面的代码,但每当我使用 formatter.parse()
时,它都会返回 EST 时区的时间。
private Date getTodayInCST() {
Calendar currentdate = Calendar.getInstance();
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
TimeZone obj = TimeZone.getTimeZone("CST");
formatter.setTimeZone(obj);
String today = formatter.format(currentdate.getTime());
try {
return formatter.parse(today);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
最佳答案
tl;博士
ZonedDateTime.now(
ZoneId.of( "America/Chicago" )
)
详细信息
I am trying to read the system date in CST time zone
“CST”是指北美的中部标准时间,还是中国标准时间?
指定proper time zone name格式为大洲/地区
,如America/Montreal
, Africa/Casablanca
,或太平洋/奥克兰
。切勿使用 3-4 个字母的缩写,例如 EST
或 IST
,因为它们不是真正的时区,不是标准化的,甚至不是唯一的上面显示的是 CST
。
ZoneId z = ZoneId.of( "America/Chicago" ) ;
java.time
您正在使用麻烦的旧日期时间类,这些类现在已经成为遗留问题。被 java.time 类取代。
获取 UTC 的当前时刻。 Instant
类代表UTC中时间线上的一个时刻。分辨率为nanoseconds (最多九 (9) 位小数)。
Instant instant = Instant.now() ;
2018-02-26T05:45:24.213610Z
调整到另一个时区。同一时刻,时间轴上的同一点,不同的挂钟时间。
ZonedDateTime zdt = instant.atZone( z ) ;
zdt.toString(): 2018-02-25T23:45:24.213610-06:00[America/Chicago]
以上字符串采用标准 ISO 8601 格式。 ZonedDateTime
类明智地扩展了该标准,将区域名称附加在方括号中。
如果要生成其他格式的 String 对象,请使用 DateTimeFormatter
。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu HH:mm:ss" ) ;
String output = zdt.format( f ) ;
<小时/>
关于java.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.* 类。
从哪里获取java.time类?
- Java SE 8 , Java SE 9 , 然后
- 内置。
- 是标准 Java API 的一部分,具有捆绑实现。
- Java 9 添加了一些小功能和修复。
- Java SE 6和 Java SE 7
- 许多 java.time 功能已向后移植到 ThreeTen-Backport 中的 Java 6 和 7 .
- Android
- 更高版本的 Android 捆绑了 java.time 类的实现。
- 对于早期的 Android,ThreeTenABP项目采用ThreeTen-Backport(如上所述)。请参阅How to use ThreeTenABP… .
ThreeTen-Extra项目通过附加类扩展了 java.time。该项目是 java.time future 可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如 Interval
, YearWeek
, YearQuarter
,和more .
关于java - 使用Java读取CST时区的系统时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25767825/