Java時間 日期 總結
阿新 • • 發佈:2020-12-01
獲取當前時間
new Date()
Calendar calendar= Calendar.getInstance();
calendar.getTime()
LocalDateTime.now()
System.currentTimeMillis(); // 毫秒
java.util.Date
Date物件裡存的是自格林威治時間( GMT)1970年1月1日0點至Date物件所表示時刻所經過的毫秒數
Sysytem.out.println函式在列印時間時,會取作業系統當前所設定的時區,然後根據這個時區將同毫秒數解釋成該時區的時間
new Date()
java.util.Calendar
Calendar類是抽象型別
Calendar cal = Calendar.getInstance();
// 獲取年
int year = cal.get(Calendar.YEAR);
java.util.concurrent.TimeUnit
TimeUnit提供了可讀性更好的執行緒暫停操作,通常用來替換Thread.sleep()
java.text.SimpleDateFormat
String timeStr = "2017-8-24 11:17:10"; // 字面時間 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); // 設定北京時區 Date d = sdf.parse(timeStr); System.out.println(sdf.format(d) + ", " + d.getTime()); 輸出:2017-08-24 11:17:10, 1503544630000
字母 | 日期或時間元素 | 表示 | 示例 |
---|---|---|---|
G |
Era 標誌符 | Text | AD |
y |
年 | Year | 1996 ; 96 |
M |
年中的月份 | Month | July ; Jul ; 07 |
w |
年中的週數 | Number | 27 |
W |
月份中的週數 | Number | 2 |
D |
年中的天數 | Number | 189 |
d |
月份中的天數 | Number | 10 |
F |
月份中的星期 | Number | 2 |
E |
星期中的天數 | Text | Tuesday ; Tue |
a |
Am/pm 標記 | Text | PM |
H |
一天中的小時數(0-23) | Number | 0 |
k |
一天中的小時數(1-24) | Number | 24 |
K |
am/pm 中的小時數(0-11) | Number | 0 |
h |
am/pm 中的小時數(1-12) | Number | 12 |
m |
小時中的分鐘數 | Number | 30 |
s |
分鐘中的秒數 | Number | 55 |
S |
毫秒數 | Number | 978 |
z |
時區 | General time zone | Pacific Standard Time ; PST ; GMT-08:00 |
Z |
時區 | RFC 822 time zone | -0800 |
日期和時間模式 | 結果 |
---|---|
"yyyy.MM.dd G 'at' HH:mm:ss z" |
2001.07.04 AD at 12:08:56 PDT |
"EEE, MMM d, ''yy" |
Wed, Jul 4, '01 |
"h:mm a" |
12:08 PM |
"hh 'o''clock' a, zzzz" |
12 o'clock PM, Pacific Daylight Time |
"K:mm a, z" |
0:08 PM, PDT |
"yyyyy.MMMMM.dd GGG hh:mm aaa" |
02001.July.04 AD 12:08 PM |
"EEE, d MMM yyyy HH:mm:ss Z" |
Wed, 4 Jul 2001 12:08:56 -0700 |
"yyMMddHHmmssZ" |
010704120856-0700 |
"yyyy-MM-dd'T'HH:mm:ss.SSSZ" |
2001-07-04T12:08:56.235-0700 |
java.text.DateFormat
DateFormat df1 = DateFormat.getDateInstance();
DateFormat df2 = DateFormat.getDateTimeInstance();
DateFormat df3 = DateFormat.getTimeInstance();
java.time.Instant
精確到納秒
Instant 代表的是一個時間,並不包括時區,1970年計算偏移量
例項不可變,可計算,可比較
Instant instant = Instant.now();
System.out.println(instant); # 2020-11-10T08:31:41.475Z
// 現在的時間上加上5個小時4分鐘
Instant instant1 = instant.plus(Duration.ofHours(5).plusMinutes(4));
java.time.LocalTime
不帶時區的日期
例項不可變,可計算,可比較
java.time.LocalDate
不帶時區的日期
例項不可變,可計算,可比較
java.time.LocalDateTime
ISO-8601日曆系統中沒有時區的日期時間
例項不可變,可計算,可比較
LocalDateTime now = LocalDateTime.now();
now.isBefore();
now.isAfter();
now.format();
now.toLocalDate();
now.plusDays(1);//可能是負數
now.minusDays(1);
now.getDayOfWeek();
now.toEpochSecond(ZoneOffset.of("+8"));// 獲取時間戳
時間戳
LocalDateTime.now().
前臺UI時間、Java程式時間、Mysql時間
java.sql.Date
java.sql.Time
java.sql.Timestamp
從資料庫讀取的時間,到了java客戶端可能存在不同時間,這裡就要設定mysql的時區 serverTimezone=Asia/Shanghai
Instant instant = Instant.parse("2017-05-24T07:56:22Z");
LocalTime localTime = instant.atZone(ZoneId.systemDefault()).toLocalTime();