import java.time.*;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
public class Ans {
public static void main(String[] args) {
test1();
test2();
test5();
}
static void test1() {
//老版本的方法
// Date:
Date date = new Date();
System.out.println(date.getYear()+1900); //getYear等函數以及在JDK1.1開始過時,由Calendar.get代替
System.out.println(date.toString());
System.out.println(date.toGMTString());
System.out.println(date.toLocaleString()); //其實還有很多別的方法,但在這裏不細研究
//Calendar比Date多了可以簡單運算的能力
Calendar c = Calendar.getInstance(); //只能這樣的到,而且必然是當前時間,如果需要修改只能去覆蓋
int y = c.get(Calendar.YEAR);
int m = 1 + c.get(Calendar.MONTH); //這裏與Date一樣,返回月份需要+1
int d = c.get(Calendar.DAY_OF_MONTH);
int w = c.get(Calendar.DAY_OF_WEEK);
int hh = c.get(Calendar.HOUR_OF_DAY);
int mm = c.get(Calendar.MINUTE);
int ss = c.get(Calendar.SECOND);
int ms = c.get(Calendar.MILLISECOND);
System.out.println(y + "-" + m + "-" + d + " " + w + " " + hh + ":" + mm + ":" + ss + "." + ms);
Date date1 = c.getTime(); //轉換
System.out.println(date1);
//TimeZone爲時區轉換功能
TimeZone tz0 = TimeZone.getDefault();
TimeZone tz1 = TimeZone.getTimeZone("GMT+09:00"); //有好幾種方法得到時區
System.out.println(tz1.getID());
c.clear(); //先清除
c.setTimeZone(tz1); //設置時區
c.set(2019, Calendar.NOVEMBER,20,8,15,0); //設置時間
System.out.println(c.getTime());
}
static void test2() {
//新的方法:
//LocalDateTime 從java 8開始
LocalDate ld = LocalDate.now();
LocalTime lt = LocalTime.now();
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ld);
System.out.println(lt);
System.out.println(ldt); //這樣做可能使時間不統一(雖然在這裏體現不出來),因爲代碼的執行需要時間
LocalDateTime ldt2 = LocalDateTime.now();
LocalDate ld2 = ldt2.toLocalDate();
LocalTime lt2 = ldt2.toLocalTime(); //這樣做最保險
//如果要對LocalDateTime做格式上的操作,可以使用DateTimeFormatter
//Duration表示兩個時刻之間的時間間隔,Period表示天數間隔
LocalDateTime start = LocalDateTime.of(2019, 11, 19, 8, 15, 0);
LocalDateTime end = LocalDateTime.of(2020, 1, 9, 19, 25, 30);
Duration d = Duration.between(start,end);
Period p = LocalDate.of(2019, 11, 19).until(LocalDate.of(2020, 1, 9));
System.out.println(p);
System.out.println(d);
}
static void test3() {
//涉及到時間問題時不要自己計算,否則容易在始區,夏令時的問題上犯錯
//LocalDateTime只能表示本地時間和日期,表示一個帶時區的時間就要ZonedDateTime
ZonedDateTime zdt = ZonedDateTime.now(); //默認時區
ZonedDateTime zny = ZonedDateTime.now(ZoneId.of("America/New_York")); // 用ZoneId指定時區獲取當前時間
System.out.println(zdt);
System.out.println(zny);
}
static void test4() {
//在使用新的LocalDateTime或ZonedLocalDateTime時格式化需要DateTimeFormatter
//DateTimeFormatter不改變對象,且線程安全
}
static void test5() {
//計算機儲存當前時間本質上就是一個不斷遞增的整數,System.currentTimeMillis返回的是毫秒錶示的當前時間
System.out.println(System.currentTimeMillis());
//我們也可以用Instant得到時間戳
System.out.println(Instant.now()); //而Instant多了納秒精度
}
}