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

时间:2019-02-27 23:29:40

标签: java android time timestamp

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

4 个答案:

答案 0 :(得分:1)

tl; dr

使用在 java.time 包中找到的ZoneIdZonedDateTime类。

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

最好明确指定所需/期望的时区。

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

java.time

现代方法使用了几年前的 java.time 类,这些类取代了可怕的旧类,例如TimestampCalendarDate,{{1 }}和TimeZone

SimpleDateFormat的格式指定proper time zone name,例如Continent/RegionAmerica/MontrealAfrica/Casablanca。切勿使用2-4个字母的缩写,例如Pacific/AucklandEST,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

IST

捕获当前时刻,该时刻是通过特定区域的人们使用的挂钟时间(上面提到的时区)看到的。

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

table of legacy and modern classes for date-time handling in Java


关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要ZonedDateTime zdt = ZonedDateTime.now( z ) ; 类。

在哪里获取java.time类?

答案 1 :(得分:0)

您可以使用以下方法获取带有时区的时间戳:

public static long getTimestampWithGMT() {
    long timestamp = System.currentTimeMillis() / 1000;
    int offset = (TimeZone.getDefault().getRawOffset() + TimeZone.getDefault().getDSTSavings()) / 1000;

    return timestamp + offset;
}

答案 2 :(得分:-1)

您可以使用Calendar类获取当前时间戳。然后,您可以格式化此时间戳以显示日期,日,月,年,时间等。

Calendar c = Calendar.getInstance(); 

查看此链接: Calendar class in java with examples (GeeksForGeeks)

答案 3 :(得分:-1)

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

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