1. 程式人生 > 其它 >Java日期時間處理總結

Java日期時間處理總結

java.util.Date、java.util.Calendar(jdk1.8前)、java.time.LocalDate(jdk1.8後執行緒安全)

Date類

// 1626624005531  時間戳為Long型別,適用於計算時間差
Long time = System.currentTimeMillis();

//時間戳和Date類互相轉換
Date date = new Date();
Long time = date.getTime();
// 時間戳轉換為 Date 型別
Long long = 1626624005531L;
Date nowTime = new Date(long);

//java.util.Date 類與 java.text.SimpleDateFormat 類一起用,用於格式化日期
//getDateTimeInstance(),getDateInstance(),getTimeInstance()靜態方法獲取標準日期格式
System.out.println(new Date());                   // Thu Jul 29 10:30:04 CST 2021  
String s = SimpleDateFormat.getDateTimeInstance().format(new Date());   //2021-7-29 10:30:04
//將字串轉換為日期
String timeOne = "2021-07-18 22:53:22";
Date date = SimpleDateFormat.getDateTimeInstance().parse(timeOne);

Calendar類

java.util.Calendar:日曆類,是個抽象類
Calendar 例項化的方法:

  1. 建立其子類 GregorianCalendar的物件
  2. 呼叫其靜態方法 getInstance()
//兩種方法本質上相同,呼叫靜態方法獲取的物件就是子類的物件
Calendar calendar = Calendar.getInstance();
// class java.util.GregorianCalendar
System.out.println(calendar.getClass());

常用方法:
● get(int field):獲取某個時間
● set():設定某個時間
● add():在某個時間上,加上某個時間
● getTime():將 Calendar 類轉換為 Date 類
● setTime():將 Date 類轉換為 Calendar 類
field 取值有:
● Calendar.DAY_OF_MONTH:這個月的第幾天
● Calendar.DAY_OF_YEAR:這年的第幾天

//get()獲取當前時間
int i = calendar.get(Calendar.DAY_OF_MONTH);
//set(int field, int value)設定當前時間
calendar.set(Calendar.DAY_OF_MONTH, 23);
//add(int field, int value)給當前時間新增時間
calendar.add(Calendar.DAY_OF_MONTH, 5);

//和Date類相互轉化
Date time = calendar.getTime();
calendar.setTime(new Date());

java.time.LocalDate(jdk1.8後執行緒安全)

https://blog.csdn.net/sco5282/article/details/118914681
java.time 中包含了:
● LocalDate類:本地日期。yyyy-MM-dd 格式的日期。可以儲存生日、紀念日等
● LocalTime類:本地時間。代表的是時間,不是日期
● LocalDateTime類:本地日期時間
● ZonedDateTime類:時區
● Duration類:持續時間
java.time常用API:
● now():獲取當前時間、日期
● of():獲取指定的日期、時間
● getXxx():獲取值
● withXxx():設定值
● plusXxx():加
● minusXxx():減
格式化:先獲取格式物件
format物件.format() 時間物件轉換為字串
format物件.parse() 字串轉化為時間物件

System.out.println(LocalDateTime.now());   //2021-07-29T10:53:35.429
LocalDateTime dateTime = LocalDateTime.of(2021, 7, 19, 21, 50, 0);  //2021-07-19T21:50

System.out.println(localDateTime.getDayOfMonth());     // 19
System.out.println(localDateTime.getMonth());          // JULY

//具有不可變性,設定後返回物件為新物件
LocalDateTime dayOfMonth = localDateTime.withDayOfMonth(25);    //2021-07-25T10:58:10.903
System.out.println(localDateTime);                              //2021-07-29T10:58:10.903
LocalDateTime l = now.withYear(2002).withDayOfMonth(2).withMonth(2);

LocalDateTime months = localDateTime.plusMonths(5);

//將時間轉換為字串格式   FormatStyle.MEDIUM表示格式 2021-7-29 11:08:03 
String format = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM).format(LocalDateTime.now());
//自定義格式    2021-07-29 11:08:03  
String format1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
//字串轉化為時間
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime parse = LocalDateTime.parse("2021-07-29 11:27:08", dateTimeFormatter);

mysql中比較時間大小

前端傳來的都是字串格式,如果類似於2020-01-13T16:00:00.000Z,是世界標準時間,使用DateFormatUtils轉換
● 時間型別:直接用 between and
● 字串 ->時間: STR_TO_DATE(report_time,'%Y-%m-%d %H:%i:%s')
● 時間戳 ->時間: from_unixtime(1592755199)