Java如何獲取當前日期和時間


本篇博客主要總結Java里面關於獲取當前時間的一些方法

System.currentTimeMillis()

獲取標准時間可以通過System.currentTimeMillis()方法獲取,此方法不受時區影響,得到的結果是時間戳格式的。例如:

1543105352845 

我們可以將時間戳轉化成我們易於理解的格式

SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");
Date date = new Date(System.currentTimeMillis());
System.out.println(formatter.format(date));

則該時間戳對應的時間為:

2018-11-25 at 01:22:12 CET

值得注意的是,此方法會根據我們的系統時間返回當前值,因為世界各地的時區是不一樣的。

java.util.Date

在Java中,獲取當前日期最簡單的方法之一就是直接實例化位於Java包java.util的Date類。

Date date = new Date(); // this object contains the current date value 

上面獲取到的日期也可以被format成我們需要的格式,例如:

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss:SSS");  
System.out.println(formatter.format(date));

Calendar API

Calendar類,專門用於轉換特定時刻和日歷字段之間的日期和時間。

使用Calendar 獲取當前日期和時間非常簡單:

Calendar calendar = Calendar.getInstance(); // get current instance of the calendar  

與date一樣,我們也可以非常輕松地format這個日期成我們需要的格式

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");  
System.out.println(formatter.format(calendar.getTime()));  

上面代碼打印的結果如下:

25-11-2018 00:43:39

Date/Time API
Java 8提供了一個全新的API,用以替換java.util.Date和java.util.Calendar。Date / Time API提供了多個類,幫助我們來完成工作,包括:

LocalDate
LocalTime
LocalDateTime
ZonedDateTime
LocalDate
LocalDate只是一個日期,沒有時間。 這意味着我們只能獲得當前日期,但沒有一天的具體時間。

LocalDate date = LocalDate.now(); // get the current date 

我們可以format它

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");  
System.out.println(date.format(formatter));  

得到的結果只有年月日,例如:

25-11-2018 

LocalTime

LocalTime與LocalDate相反,它只代表一個時間,沒有日期。 這意味着我們只能獲得當天的當前時間,而不是實際日期:

LocalTime time = LocalTime.now(); // get the current time  

可以按如下方式format

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");  
System.out.println(time.format(formatter));

得到的結果類似如下:

00:55:58  

LocalDateTime

最后一個是LocalDateTime,也是Java中最常用的Date / Time類,代表前兩個類的組合 - 即日期和時間的值:

LocalDateTime dateTime = LocalDateTime.now(); // get the current date and time  

format的方式也一樣

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");  
System.out.println(dateTime.format(formatter));

得到的日期結果類似於:

25-11-2018 00:57:20  

比較兩個日期

SimpleDateFormat dateFormat = new SimpleDateFormat ("yyyy-MM-dd");
Date date1 = dateFormat.parse("2019-09-16");
Date date2 = dateFormat.parse("2020-01-25");

if(date1.before(date2)){
   System.out.println("Date1 時間在 Date2 之前");
} 

if(date1.after(date2)){
   System.out.println("Date1 時間在 Date2 之后");
} 

if(equals.equals(date2)){
   System.out.println("Date1 時間與 Date2 相等");
} 

# compareTo():等於,返回 0,大於參數日期,返回正值,小於參數日期,返回負數
if(equals.compareTo(date2)){
   System.out.println("Date-1 is compareTo Date-2");
}

——————————————————————————————————————-------------------------------------
# 使用java.util.Calendar比較兩個Date日期
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);

if(cal1.after(cal2)) {
   System.out.println("Date1 時間在 Date2 之后");
}

if(cal1.before(cal2)) {
   System.out.println("Date1 時間在 Date2 之前");
}

if(cal1.equals(cal2)) {
   System.out.println("Date1 時間與 Date2 相等");
}
--------------------------------------------------------------------------
#  Java 8日期比較
DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date1 = LocalDate.of(2009, 12, 31);
LocalDate date2 = LocalDate.of(2019, 1, 31);

if(date1.isAfter(date2)) {
   System.out.println("Date1 時間在 Date2 之后");
}

if(date1.isBefore(date2)) {
   System.out.println("Date1 時間在 Date2 之前");
}

if(date1.isEqual(date2)) {
   System.out.println("Date1 時間與 Date2 相等");
}

時間戳與Date相互轉換

// 一、時間戳與Date相互轉換
// 時間戳轉Date
public static void timestamp2Date() {
	long timeMillis = System.currentTimeMillis();
	Date date = new Date(timeMillis);
}
// Date轉時間戳
public static void date2Timestamp() {
	Date date = new Date();
	long timeMillis = date.getTime();
}
// 二、時間戳與LocalDateTime相互轉換
// 時間戳轉LocalDateTime
public static void timestamp2LocalDateTime() {
	long timeMillis = System.currentTimeMillis();
	ZoneId zoneId = ZoneId.systemDefault();
	LocalDateTime localDateTime = Instant.ofEpochMilli(timeMillis).atZone(zoneId).toLocalDateTime();
}
// LocalDateTime轉時間戳
public static void localDateTime2Timestamp() {
	ZoneId zoneId = ZoneId.systemDefault();
	LocalDateTime now = LocalDateTime.now();
	long epochMilli = now.atZone(zoneId).toInstant().toEpochMilli();
}

LocalDateTime常見用法 

// 1、獲取當前日期
年月日時分秒:LocalDateTime now=LocalDateTime.now();
年月日:LocalDate today = LocalDate.now();
時分秒:LocalTime time= LocalTime.now();

// 2、獲取某一個日期
根據字符串獲取: LocalDate date= LocalDate.parse(“2020-01-10”);
取本月第1天:LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth()); // 2020-01-01
取本月第2天:LocalDate secondDayOfThisMonth = today.withDayOfMonth(2); // 2020-01-02
取本月最后一天:LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth()); // 2019-12-31
取2020年1月第一個周一:LocalDate firstMonday = LocalDate.parse(“2020-01-01”).with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); // 2020-01-06

// 日期加減
LocalDateTime nextnow= now.plusDays(1); //返回LocalDateTime加上指定天數得到的值
now.plusHours(3); //返回LocalDateTime加上指定小時數得到的值
now.plusMinutes(10); //返回LocalDateTime加上指定分鍾數得到的值
now.plusMonths(2); //返回LocalDateTime加上指定月數得到的值
now.plusWeeks(1); //返回LocalDateTime加上指定星期數得到的值
now.plusYears(3); //返回LocalDateTime加上指定年數得到的值
now.minusHours(2); //返回LocalDateTime減去指定小時數得到的值
now.minusHours(2); //返回LocalDateTime減去指定小時數得到的值
now.minusMinutes(2); //返回LocalDateTime減去指定分鍾數得到的值
now.minusMonths(2); //返回LocalDateTime減去指定月數得到的值
now.minusNanos(2); //返回LocalDateTime減去指定納秒數得到的值
now.minusSeconds(2); //返回LocalDateTime減去指定秒數得到的值
now.minusWeeks(2); //返回LocalDateTime減去指定星期數得到的值
now.minusYears(2); //返回LocalDateTime減去指定年數得到的值
// 4、2個日期的計算
//相差的小時數:
Duration duration = Duration.between(createAt, now);
long hours = duration.toHours();
//相差的分鍾數:
long minutes=duration.toMinutes();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM