存儲時間打算用時間戳來存儲,打算用long類型來代表時間戳,但是在用long類型存儲時間戳的時候出了點問提。
在寫單元測試的時候,用一個long類型來存儲時間戳,發(fā)現(xiàn)編譯器報錯了
剛開始猜想可能是因為long不夠大,存儲不了。然后用double類型來存:
發(fā)現(xiàn)還是報錯了,仔細想想不對,double存儲的數(shù)量應該時很大的,不會連時間戳都存儲不了。
在后面加上小數(shù)點之后,居然可以存了:
加了小數(shù)點之后就能存了,仔細一想,之前沒加小數(shù)點的時候他是整數(shù),加了小數(shù)點之后變成了浮點數(shù),猜測之前沒加上小數(shù)點的時間戳是一個整形的字面值,加上小數(shù)點后是一個浮點數(shù)的字面值,之前的報錯應該不是存儲類型的問題,而是字面值范圍超出了。
用字符串來測試:
把時間戳變成字符串的字面值,在將他解析成long類型的和int類型的,然后在把他們輸出:
發(fā)現(xiàn)第一個long類型的成功輸出了,而int類型的卻報了一個number的錯誤.
這說明long是可以存儲時間戳的,而int存儲不了時間戳,所以判斷之前不能存儲時因為字面值為整形超出了范圍。
java 各種日期/時間 對象轉long時間戳
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
package cn.xbz; import java.text.simpledateformat; import java.time.*; import java.time.format.datetimeformatter; import java.util.calendar; import java.util.date; /** * @title 各種日期/時間對象轉時間戳 * @author xingbz * @createdate 2018-5-18 */ public class datetime2millisdemo { private static final string format_str = "yyyy-mm-dd hh:mm:ss" ; public static void main(string[] args) { system.out.println( "====== jdk7及之前 ======" ); long l1 = getmillis1(); long l2 = date2millis( new date()); long l3 = calendar2millis(calendar.getinstance()); long l4 = string2millis( new simpledateformat(format_str).format( new date()) , format_str); //為了與以上幾個保持一致 system.out.println(l1 + "\n" + l2 + "\n" + l3 + "\n" + l4); //會有幾毫秒的差別 system.out.println( "====== jdk8 ======" ); long l5 = getmillis2(); long l6 = localdatetime2millis(localdatetime.now()); long l7 = localdate2millis(localdate.now()); long l8 = clock2millis(clock.systemutc()); long l9 = zonedatetime2millis(zoneddatetime.now()); long l10 = string2milliswithjdk8(localdatetime.now().format(datetimeformatter.ofpattern(format_str)) , format_str); //為了與以上幾個保持一致 system.out.println(l5 + "\n" + l6 + "\n" + l7 + "\n" + l8 + "\n" + l9 + "\n" + l10); //會有幾毫秒的差別 } /* jdk7及之前 */ /** 獲取時間戳 */ public static long getmillis1() { return system.currenttimemillis(); } /** date轉時間戳 */ public static long date2millis(date date) { return date.gettime(); } /** calendar轉時間戳 */ public static long calendar2millis(calendar calendar) { return calendar.gettime().gettime(); } /** 日期字符串轉時間戳 */ public static long string2millis(string datestr, string formatstr) { try { simpledateformat simpledateformat = new simpledateformat(formatstr); return simpledateformat.parse(datestr).gettime(); } catch (exception e) { return 0l; } } /* jdk8 */ /** 獲取時間戳 */ public static long getmillis2() { return instant.now().toepochmilli(); } /** localdatetime轉時間戳 */ public static long localdatetime2millis(localdatetime localdatetime) { return localdatetime.toinstant(zoneoffset.ofhours(8)).toepochmilli(); } /** localdate轉時間戳 */ public static long localdate2millis(localdate localdate) { return localdatetime.of(localdate, localtime.min).toinstant(zoneoffset.ofhours(8)).toepochmilli(); } /** clock轉時間戳 */ public static long clock2millis(clock clock) { return clock.millis(); } /** zonedatetime轉時間戳(這個不常用吧~) */ public static long zonedatetime2millis(zoneddatetime zoneddatetime) { return zoneddatetime.tolocaldatetime().toinstant(zoneoffset.ofhours(8)).toepochmilli();//!!!好費勁 } /** string轉時間戳(jdk8) */ public static long string2milliswithjdk8(string datestr , string formatstr) { return localdatetime.parse(datestr , datetimeformatter.ofpattern(formatstr)).toinstant(zoneoffset.ofhours( 8 )).toepochmilli(); } } |
輸出如下 :
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://segmentfault.com/a/1190000016727089