android: 日期轉Unix時間戳,Unix時間戳轉日期,帶時區

一、UTC時間&GMT時間

UTC時間是時間標準時間(Universal Time Coordinated),UTC是根據原子鐘來計算時間,偏差很是小。spa

UTC也是指零時區的時間,若是要表示其餘時區的時間,這裏要注意沒有UTC+0800或者UTC+8這樣的表示方式(至少Java裏面沒有,通常用於口頭表示),只有Asia/Shanghai這樣的表示方式,詳細的時區列表參考這個文檔時區列表。code

GMT時間是根據地球的自轉和公轉來計算時間,老的時間計量標準,這裏咱們不過多討論orm

二、表達時間方式

咱們通常表示時間都會帶格式以方便理解,例如時間表達式是'2018-09-12 08:00:00',由於咱們在東八區,因此默認是:北京時間2018年9月12號8點整。可是若是是一個美國人看到這個時間,就會認爲是美國東部or西部時間的2018年9月12號8點整。因此從這種表達方式很不許確,由於沒有指明究竟是哪一個時區的時間!!!!blog

因此準確的表達時間必須帶有時區,例如2018-09-12 08:00:00+0800,表達了Asia/Shanghai這個時區的時間2018年9月12號8點整。這裏要注意+0800並非表示加8小時的意思,只是表示這個時間'2018-09-12 08:00:00'是東八區Asia/Shanghai的時間,僅此而已。文檔

三、UTC時間的時間戳

講清楚了時間表達方式,再講時間戳。時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至如今的總秒數。也就是在'1970-01-1 00:00:00+0000' 或 '1970-01-1 08:00:00+0800'這個時間點,時間戳是0。這也是Java裏時間組件的默認方式,無論用戶輸入的人類可識別的時間是什麼格式,在內部統一存的是時間戳。字符串

例如時間是'2018-09-01 08:00:00+0800',那麼使用date.getTime()獲取到時間戳是1535760000000;時間是'2018-09-01 00:00:00+0000',獲取到時間戳也是1535760000000。get

     try {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ", Locale.getDefault());

            Log.i("xp.chen", sdf.parse("2018-09-01 08:00:00+0800").getTime()+"");
            Log.i("xp.chen", sdf.parse("2018-09-01 00:00:00+0000").getTime()+"");
            Log.i("xp.chen", sdf.parse("1970-01-01 00:00:00+0000").getTime()+"");
        } catch (ParseException e) {
            e.printStackTrace();
        }

運行結果:io

2019-05-08 16:09:10.935 21352-21352/? I/xp.chen: 1535760000000
2019-05-08 16:09:10.935 21352-21352/? I/xp.chen: 1535760000000
2019-05-08 16:09:10.935 21352-21352/? I/xp.chen: 0form

四、時間戳與日期以前的相互轉換

【時間戳轉日期】class

     long curTime = 1535760000000L;
        String timeStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z", Locale.getDefault()).format(new Date(curTime));
        Log.i("xp.chen", "timeStr: "+timeStr);

運行結果:

2019-05-08 16:14:58.573 22835-22835/? I/xp.chen: timeStr: 2018-09-01 08:00:00 +0800

【日期轉時間戳】

     try {
            String src_dateStr = "2018-09-01 08:00:00 +0800";
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z", Locale.getDefault()).parse(src_dateStr));
            long timeInMillis = calendar.getTimeInMillis();
            Log.i("xp.chen", "timeInMillis: "+timeInMillis);
        } catch (ParseException e) {
            e.printStackTrace();
        }

運行結果:

2019-05-08 16:14:58.573 22835-22835/? I/xp.chen: timeInMillis: 1535760000000

【得到當前日期字符串含時區】

  public static String getDateStrIncludeTimeZone() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z", Locale.getDefault());
        return sdf.format(new Date());
    }
相關文章
相關標籤/搜索