1. 程式人生 > 實用技巧 >Java時間 日期 總結

Java時間 日期 總結

獲取當前時間

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();


時區