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多了纳秒精度
}
}