欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中new Date().getTime()指定時(shí)區(qū)的時(shí)間戳問題小結(jié)

 更新時(shí)間:2023年07月18日 09:53:53   作者:自知自省  
本文主要介紹了Java中new Date().getTime()時(shí)間戳問題小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1. getTime()返回值

Java和JavaScript都支持時(shí)間類型Date,他們的getTime()方法返回的是毫秒數(shù)。默認(rèn)返回的是13位數(shù)字,單位是毫秒。

2. 注意事項(xiàng)

 /**
     * Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT
     * represented by this <tt>Date</tt> object.
     *
     * @return  the number of milliseconds since January 1, 1970, 00:00:00 GMT
     *          represented by this date.
     */
    public long getTime() {
        return getTimeImpl();
    }

容易造成誤解的地方:

如果程序運(yùn)行在東八區(qū),它返回北京時(shí)間1970年01月01日08時(shí)00分00秒起至現(xiàn)在東八區(qū)時(shí)間的總毫秒數(shù)。如果運(yùn)行在UTC時(shí)區(qū)則返回1970年01月01日00時(shí)00分00秒起至當(dāng)前UTC時(shí)間的總毫秒數(shù)。看起來似乎getTime()方法獲取的時(shí)間戳與程序所運(yùn)行的時(shí)區(qū)有關(guān)。

Perdió的解釋非常好,摘抄如下:

其實(shí)不是的,getTime()本身是沒有問題,取到的timestamp就是從1970-01-01 00:00:00(UTC)起到當(dāng)前的毫秒數(shù)。與程序真實(shí)運(yùn)行的容器(服務(wù)器)所在的時(shí)區(qū)無關(guān)。東八區(qū)"北京時(shí)間1970年01月01日08時(shí)00分00秒"不就是UTC的1970年01月01日00時(shí)00分00秒嗎。

3.Java獲取指定時(shí)區(qū)的時(shí)間戳

public static long getTimeZoneTimeStr(String dateStr,String timeZone) {
        long result = 0L;
        int year;
        int month;
        int day;
        int hour;
        int minute;
        int second;
        Calendar calendarTime = Calendar.getInstance();
        if(timeZone != null){
            TimeZone tz = TimeZone.getTimeZone(timeZone);
            calendarTime.setTimeZone(tz);
        }
        if (null != dateStr && 14 == dateStr.length()) {
            year = Integer.parseInt(dateStr.substring(0, 4));
            month = Integer.parseInt(dateStr.substring(4, 6));
            day = Integer.parseInt(dateStr.substring(6, 8));
            hour = Integer.parseInt(dateStr.substring(8, 10));
            minute = Integer.parseInt(dateStr.substring(10, 12));
            second = Integer.parseInt(dateStr.substring(12, 14));
            calendarTime.set(1, year);
            calendarTime.set(2, month - 1);
            calendarTime.set(5, day);
            calendarTime.set(11, hour);
            calendarTime.set(12, minute);
            calendarTime.set(13, second);
            result = calendarTime.getTime().getTime();
        }else if (null != dateStr && 19 == dateStr.length()) {
            year = Integer.parseInt(dateStr.substring(0, 4));
            month = Integer.parseInt(dateStr.substring(5, 7));
            day = Integer.parseInt(dateStr.substring(8, 10));
            hour = Integer.parseInt(dateStr.substring(11, 13));
            minute = Integer.parseInt(dateStr.substring(14, 16));
            second = Integer.parseInt(dateStr.substring(17, 19));
            calendarTime.set(1, year);
            calendarTime.set(2, month - 1);
            calendarTime.set(5, day);
            calendarTime.set(11, hour);
            calendarTime.set(12, minute);
            calendarTime.set(13, second);
            result = calendarTime.getTime().getTime();
        }
        return result;
    }

調(diào)用示例:

public static void main(String[] args) {
? ? ? ? System.out.println("-------------------- 2019-09-24 00:00:00 -----------------------");
? ? ? ? System.out.println("local: "+getTimeZoneTimeStr("2019-09-24 00:00:00",null));
? ? ? ? System.out.println("Asia/Shanghai: "+getTimeZoneTimeStr("2019-09-24 00:00:00","Asia/Shanghai"));
? ? ? ? System.out.println("GMT+0800: "+getTimeZoneTimeStr("2019-09-24 00:00:00","GMT+0800"));
? ? ? ? System.out.println("GMT: "+getTimeZoneTimeStr("2019-09-24 00:00:00","GMT"));
? ? ? ? System.out.println("UTC: "+getTimeZoneTimeStr("2019-09-24 00:00:00","UTC"));
? ? ? ? System.out.println("-------------------- 2019-09-23 16:00:00 -----------------------");
? ? ? ? System.out.println("local: "+getTimeZoneTimeStr("2019-09-23 16:00:00",null));
? ? ? ? System.out.println("Asia/Shanghai: "+getTimeZoneTimeStr("2019-09-23 16:00:00","Asia/Shanghai"));
? ? ? ? System.out.println("GMT+0800: "+getTimeZoneTimeStr("2019-09-23 16:00:00","GMT+0800"));
? ? ? ? System.out.println("GMT: "+getTimeZoneTimeStr("2019-09-23 16:00:00","GMT"));
? ? ? ? System.out.println("UTC: "+getTimeZoneTimeStr("2019-09-23 16:00:00","UTC"));
? ? }

程序運(yùn)行結(jié)果:

-------------------- 2019-09-24 00:00:00 -----------------------
local: 1569254400072
Asia/Shanghai: 1569254400115
GMT+0800: 1569254400115
GMT: 1569283200115
UTC: 1569283200115
-------------------- 2019-09-23 16:00:00 -----------------------
local: 1569225600116
Asia/Shanghai: 1569225600116
GMT+0800: 1569225600116
GMT: 1569254400116
UTC: 1569254400116

總結(jié)

運(yùn)行結(jié)果可以看出,在Java中Date.getTime()獲取到的時(shí)間戳其實(shí)是東8區(qū)的時(shí)間“2019-09-24 00:00:00”(即返回的是北京時(shí)間1970年01月1日0點(diǎn)0分0秒以來的毫秒數(shù),對應(yīng)UTC時(shí)間1970年01月1日8點(diǎn)0分0秒以來的毫秒數(shù),其數(shù)值大小等于0時(shí)區(qū)的“2019-09-23 16:00:00”所對應(yīng)的時(shí)間戳)所對應(yīng)得時(shí)間戳。

到此這篇關(guān)于Java中new Date().getTime()時(shí)間戳問題小結(jié)的文章就介紹到這了,更多相關(guān)Java getTime()時(shí)間戳內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(61)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(61)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08
  • springboot項(xiàng)目中idea的pom.xml文件的引用標(biāo)簽全部爆紅問題解決

    springboot項(xiàng)目中idea的pom.xml文件的引用標(biāo)簽全部爆紅問題解決

    這篇文章主要介紹了springboot項(xiàng)目中idea的pom.xml文件的引用標(biāo)簽全部爆紅問題解決,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-12-12
  • java中Hashtable和HashMap的區(qū)別分析

    java中Hashtable和HashMap的區(qū)別分析

    java中Hashtable和HashMap的區(qū)別分析,需要的朋友可以參考一下
    2013-04-04
  • SpringBoot整合RabbitMQ的5種模式的注解綁定詳解

    SpringBoot整合RabbitMQ的5種模式的注解綁定詳解

    這篇文章主要介紹了SpringBoot整合RabbitMQ的5種模式的注解綁定詳解,RabbitMQ 是一個(gè)消息中間件,它接收消息并且轉(zhuǎn)發(fā),是"消費(fèi)-生產(chǎn)者模型"的一個(gè)典型的代表,一端往消息隊(duì)列中不斷的寫入消息,而另一端則可以讀取或者訂閱隊(duì)列中的消息,需要的朋友可以參考下
    2024-01-01
  • 入門到精通Java?SSO單點(diǎn)登錄原理詳解

    入門到精通Java?SSO單點(diǎn)登錄原理詳解

    這篇文章主要介紹了入門到精通Java?SSO單點(diǎn)登錄原理詳解,本文主要對SSO單點(diǎn)登錄與CAS、OAuth2.0兩種授權(quán)協(xié)議的關(guān)系和原理進(jìn)行詳細(xì)說明
    2022-09-09
  • java之路徑分隔符介紹

    java之路徑分隔符介紹

    考慮到程序的可移植性,創(chuàng)建文件時(shí)建議大家選用"/",因?yàn)榻?jīng)過測試用java創(chuàng)建文件時(shí)在windows平臺(tái)下用“/”也是可以的,java貌似在后臺(tái)作過處理了。
    2013-03-03
  • EL調(diào)用Java方法_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    EL調(diào)用Java方法_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    簡單來說,我們在一個(gè)類中的某個(gè)方法,可以使用EL進(jìn)行調(diào)用,這個(gè)能被EL表達(dá)式調(diào)用的方法稱之為EL函數(shù),但是這種方式必須滿足兩點(diǎn)要求,具體哪兩點(diǎn),大家可以參考下本文
    2017-07-07
  • 詳解SpringBoot啟動(dòng)類的掃描注解的用法及沖突原則

    詳解SpringBoot啟動(dòng)類的掃描注解的用法及沖突原則

    這篇文章主要介紹了詳解SpringBoot啟動(dòng)類的掃描注解的用法及沖突原則,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • java命令調(diào)用虛擬機(jī)方法總結(jié)

    java命令調(diào)用虛擬機(jī)方法總結(jié)

    在本篇文章里我們給大家整理了關(guān)于java中的java命令如何調(diào)用虛擬機(jī)的方法和具體步驟,需要的朋友們跟著操作下。
    2019-05-05
  • Java中double保留兩位小數(shù)的多種方法

    Java中double保留兩位小數(shù)的多種方法

    這篇文章主要給大家介紹了關(guān)于Java中double保留兩位小數(shù)的多種方法,對于double數(shù)據(jù)類型進(jìn)行計(jì)算發(fā)生的精度丟失的情況,可以按照自己的需求選擇任意方式,需要的朋友可以參考下
    2023-07-07

最新評論