[英]How to get current timestamp with TimeZone in Java
我想通过在Android中考虑Java中的TimeZone
来获得timeStamp
,我尝试了很多方法,但仍然找不到解决方案。
使用java.time包中的ZoneId
和ZonedDateTime
类。
ZonedDateTime.now() // Implicitly applies the JVM’s current default time zone.
最好明确指定您想要/预期的时区。
ZonedDateTime.now(
ZoneId.of( "Africa/Tunis" )
)
现代方法使用java.time类,这些类多年前取代了可怕的遗留类,例如Timestamp
、 Calendar
、 Date
、 TimeZone
和SimpleDateFormat
。
以Continent/Region
格式指定正确的时区名称,例如America/Montreal
、 Africa/Casablanca
或Pacific/Auckland
。 永远不要使用EST
或IST
等 2-4 个字母的缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
通过特定地区(上面命名的时区)的人们使用的挂钟时间捕捉当前时刻。
ZonedDateTime zdt = ZonedDateTime.now( z ) ;
java.time框架内置于 Java 8 及更高版本中。 这些类取代麻烦的老传统日期时间类,如java.util.Date
, Calendar
,和SimpleDateFormat
。
要了解更多信息,请参阅Oracle 教程。 并在 Stack Overflow 上搜索许多示例和解释。 规范是JSR 310 。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
您可以直接与您的数据库交换java.time对象。 使用符合JDBC 4.2或更高版本的JDBC 驱动程序。 不需要字符串,不需要java.sql.*
类。
从哪里获得 java.time 类?
您可以使用此方法获取带时区的时间戳:
public static long getTimestampWithGMT() {
long timestamp = System.currentTimeMillis() / 1000;
int offset = (TimeZone.getDefault().getRawOffset() + TimeZone.getDefault().getDSTSavings()) / 1000;
return timestamp + offset;
}
您可以使用 Calendar 类来获取当前时间戳。 然后您可以格式化此时间戳以显示日期、日、月、年、时间等。
Calendar c = Calendar.getInstance();
您可以使用 Calendar.getInstance().getTimeInMillis()? 它默认为设备时区,或者如果您想更改时区,您可以执行以下操作
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
calendar.getTimeInMillis();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.