Date和Calendar日期的用法
Date类
System.currentTimeMillis() // 当前时间毫秒数
Date time = new Date();
time.getTime() // 当前毫秒值
time.setTime(100000000) // 根据毫秒值设置日期
java_util_Date和java_sql_Date的区别
java.util.Date类型的数据存到数据库需要转换成java.sql.Date
java.util.Date utilData = new java.util.Date();
java.sql.Date sqlData = new java.sql.Date(utilData.getTime());
日期转字符串
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd hh:mm.ss");
String formattedDate = simpleDateFormat.format(Calendar.getInstance().getTime()); // 2018/09/20 04:40.03
字符串转日期
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd hh:mm.ss");
Date date = simpleDateFormat.parse("2018/09/20 04:40.03");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locale.CHINA);
Date date = dateFormat.parse("2018/09/20");
DateFormat的几个属性
SHORT 6/30/09 30/06/09
MEDIUM Jun 30, 2009 30 juin 2009
LONG June 30, 2009 30 juin 2009
FULL Tuesday, June 30, 2009 mardi 30 juin 2009
LocalDate
LocalDate用来获取系统默认时间
LocalDate lDate = LocalDate.now(); // 2018-09-20 不包含时间信息
LocalDate lDate = LocalDate.of(2018, 9, 10);
LocalDate lDate = LocalDate.parse("2018-09-11");
LocalDate lDate = LocalDate.now(ZoneId.systemDefault()); // 根据系统默认时区获取时间
简单日期操作
LocalDate.now() // 2018-09-20
LocalDate.now().minusDays(1) // 2018-09-19
LocalDate.now().plusDays(1); // 2018-09-21
LocalDate.now().withMonth(6) // 2018-06-20
LocalDateTime
LocalDateTime的参数含义
LocalDateTime.of(year, month, dayOfMonth, hour, minute, second, nanoOfSecond);
LocalDateTime的使用
LocalDateTime lDateTime = LocalDateTime.now(); // 2018-09-20T16:17:54.248780300
LocalDateTime lDateTime = LocalDateTime.of(2018, 9, 10, 10, 30);
LocalDateTime lDateTime = LocalDateTime.parse("2018-09-10T10:30");
LocalDateTime lDateTime = LocalDateTime.now(ZoneId.systemDefault());
Date和LocalDate的相互转化
Date转换成LocalDate
Date date = Date.from(Instant.now());
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate转换成Date
LocalDate lDate = LocalDate.now();
Date date = Date.from(lDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
Date和LocalDateTime的相互转化
Date转换成LocalDateTime
Date date = Date.from(Instant.now());
LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
LocalDateTime转换成Date
LocalDateTime lDateTime = LocalDateTime.now();
Date date = Date.from(lDateTime.atZone(ZoneId.systemDefault()).toInstant());
Calendar
用来获取日期的具体部分
Calendar cd = Calendar.getInstance();
int time = cd.get(Calendar.YEAR); // 获取年份
int time = cd.get(Calendar.MONTH) 1; // 月份从0开始,获取月份
int time = cd.get(Calendar.DAY_OF_MONTH); // 获取天
用来设置日期的具体部分
Calendar cd = Calendar.getInstance();
cd.set(Calendar.MONTH, 8); // 设置月份为9月
cd.set(1974, 6, 2, 8, 0, 0);
cd.add(Calendar.DAY_OF_MONTH, 2); // 时间偏移
Date time = cd.getTime(); // 将Calendar转化成Date类
GregorianCalendar
Calendar calendar = Calendar.getInstance();
Calendar calendar = new GregorianCalendar();
Calendar calendar = new GregorianCalendar(2016, Calendar.JANUARY, 1);
Calendar calendar = new GregorianCalendar(2016, Calendar.JANUARY, 1, 6, 55, 10);
calendar.add(Calendar.MONTH, -6); // 改变日期
calendar.roll(Calendar.MONTH, -1); // 改变日期的某一部分,其他字段不变
calendar.get(Calendar.AM_PM) // 获取某一日期部分
before_after_compareTo_equals
用来判断时间超前还是落后
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd hh:mm.ss");
Date date = simpleDateFormat.parse("2018/09/20 04:40.03");
Date date1 = simpleDateFormat.parse("2018/09/21 04:40.03");
date.after(date1) // false
date.before(date1) // true
用来判断时间是否相等
date.compareTo(date1) // -1 返回的是日期对比的order,返回0表示相等、-1表示小、1表示大
date.equals(date1) // false
清空MILLISECOND
clear方法最好只用来清空MILLISECOND,其他的日期部分可能没作用
Calendar c = Calendar.getInstance();
System.out.println(c.getTimeInMillis()); // 1537442289490
c.set(Calendar.MILLISECOND, 22);
System.out.println(c.getTimeInMillis()); // 1537442289022
c.clear(Calendar.MILLISECOND);
System.out.println(c.getTimeInMillis()); // 1537442289000
isBefore_isAfter_compareTo_equals
LocalDate lDate1 = LocalDate.of(2018, 9, 20);
LocalDate lDate2 = LocalDate.of(2012, 9, 19);
lDate1.isAfter(lDate2); //true
lDate1.isBefore(lDate2); //false
lDate1.compareTo(lDate2); // -1 返回的是日期对比的order,返回0表示相等、-1表示小、1表示大
lDate1.equals(lDate2); // false
lDate1.isEqual(lDate2); // false
时区
TimeZone.getDefault().getDisplayName(); // 中国标准时间
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("China/Shang_Hai"));
System.out.println(sdf.format(date)); // 2018-09-20 11:44:22
sdf.setTimeZone(TimeZone.getTimeZone("Europe/London"));
System.out.println(sdf.format(date)); // 2018-09-20 12:44:22
时间差值
LocalDate d1 = LocalDate.of(2018, 9, 10).plusDays(1);
LocalDate d2 = LocalDate.of(2018, 9, 16).plusMonths(1);
long days = ChronoUnit.DAYS.between(d1, d2); // 35
Instant
Instant now = Instant.now(); // 2018-09-20T11:55:12.234452700Z
LocalTime
LocalTime localtime = LocalTime.now(); // 20:03:57.909365400
LocalTime time1 = LocalTime.of(1, 0, 0);
LocalTime time2 = LocalTime.of(3, 1, 10);
time1和time2差值
System.out.println( time1.until(time2, ChronoUnit.MINUTES) ); // 121
System.out.println( time1.until(time2, ChronoUnit.HOURS) ); // 2
System.out.println( time1.until(time2, ChronoUnit.SECONDS) ); // 7270
System.out.println( ChronoUnit.MINUTES.between(time1, time2) ); // 121
System.out.println( ChronoUnit.HOURS.between(time1, time2) ); // 2
System.out.println( ChronoUnit.SECONDS.between(time1, time2) ); // 7270
时区
ZoneId zone = ZoneId.of("Asia/Shanghai");
LocalTime time1 = LocalTime.now();
LocalTime time2 = LocalTime.now(zone);
LocalTime time3 = LocalTime.parse("20:10:30");
时间差
long timeDiff = Duration.between(time1, time3).toMinutes();
long timeDiff1 = ChronoUnit.MINUTES.between(time1, time3);
System.out.println(time1); // 20:13:38.239060900
System.out.println(time2); // 20:13:38.239060900
System.out.println(time3); // 20:10:30
System.out.println(timeDiff); // -3
System.out.println(timeDiff1); // -3
结语
本文章是java成神的系列文章之一
如果你想知道,但是本文没有的,请下方留言
我会第一时间总结出来并发布填充到本文
来源:http://www./content-1-29301.html
|