繁体   English   中英

如何在 Java 中使用 TimeZone 获取当前时间戳

[英]How to get current timestamp with TimeZone in Java

我想通过在Android中考虑Java中的TimeZone来获得timeStamp ,我尝试了很多方法,但仍然找不到解决方案。

tl;博士

使用java.time包中的ZoneIdZonedDateTime类。

ZonedDateTime.now()  // Implicitly applies the JVM’s current default time zone.

最好明确指定您想要/预期的时区。

ZonedDateTime.now(
    ZoneId.of( "Africa/Tunis" ) 
)

时间

现代方法使用java.time类,这些类多年前取代了可怕的遗留类,例如TimestampCalendarDateTimeZoneSimpleDateFormat

Continent/Region格式指定正确的时区名称,例如America/MontrealAfrica/CasablancaPacific/Auckland 永远不要使用ESTIST等 2-4 个字母的缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "America/Montreal" ) ;  

通过特定地区(上面命名的时区)的人们使用的挂钟时间捕捉当前时刻。

ZonedDateTime zdt = ZonedDateTime.now( z ) ;

Java 中用于日期时间处理的遗留类和现代类表


关于java.time

java.time框架内置于 Java 8 及更高版本中。 这些类取代麻烦的老传统日期时间类,如java.util.DateCalendar ,和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(); 

查看此链接: 带有示例的 Java 中的日历类 (GeeksForGeeks)

您可以使用 Calendar.getInstance().getTimeInMillis()? 它默认为设备时区,或者如果您想更改时区,您可以执行以下操作

Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
calendar.getTimeInMillis();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM