Date
1.创建一个当前时间表示UTC 时间的日期类 ;UTC时间是:从 1970 年 1 月 1 日 00:00:00 GMT以来的指定毫秒数。
Date d = new Date();
2.Date 对象使用SimpleDateFormat格式化日期, yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。注意:有的格式大写,有的格式小写,例如 MM 是月份,mm 是分;HH 是 24 小时制,而 hh 是 12 小时制。
//默认系统时区
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//将转换格式 变为东九区(东京)时间,比北京早一个小时
sdf .setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));
String date = sdf.format(d);
Calendar 日历
1.创建一个当前时间的日期Calendar对象
//根据系统当前时间创建
Calendar c= Calendar.getInstance();
// 指定时间创建,参数依次为:年,月,日,时,分,秒,月份需要减一
Calendar calendar = new GregorianCalendar(2016, 8, 1, 15, 41, 22);
//根据不同的时区获取不同的时间,“America/Los_Angeles”-美国洛杉矶时区;"Europe/Rome"-罗马时区 东1区
Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00")); //获取东八区时间
// 获得年份
int year = c.get(Calendar.YEAR);
// 获得月份 需要加上 1
int month = c.get(Calendar.MONTH)+1;
// 获得日期
int day = c.get(Calendar.DATE);
// 获得小时
int hour = c.get(Calendar.HOUR_OF_DAY);
// 获得分钟
int minute = c.get(Calendar.MINUTE);
// 获得秒
int second = c.get(Calendar.SECOND);
// 获得星期几:1代表星期日、2代表星期1、3代表星期二,以此类推)
int week = c.get(Calendar.DAY_OF_WEEK);
2.Calendar 对象的用法
- Date和Calendar 对象相互转换
//Date 对象转为Calendar
c.setTime(new Date());
//Calendar转为Date对象
Date date = Calendar.getInstance().getTime();
- 获取当前月份的最大天数
Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH);
- 对日期进行操作。即日期加减:年月日以及小时分秒等。
//把c对象的日期加上10,也就是c也就表示为10天后的日期,其它所有的数值会被重新计算
c.add(Calendar.DATE, 10);
//把c对象的日期减去10,也就是c也就表示为10天前的日期,其它所有的数值会被重新计算
c.add(Calendar.DATE, -10);
- 两个日期相差天数
long millisOfDay = 24 * 60 * 60 * 1000;
Calendar calendar = new GregorianCalendar(2015, 9, 1);
Calendar calendar1 = new GregorianCalendar(2016, 9, 1);
Calendar calendar2 = new GregorianCalendar(2017, 9, 1);
// 2016年是闰年,得到366天
(calendar1.getTimeInMillis() - calendar.getTimeInMillis()) / millisOfDay;
// 2017年是平年,得到365天
(calendar2.getTimeInMillis() - calendar1.getTimeInMillis()) / millisOfDay;
LocalDate,LocalTime ,LocalDateTime
这几个时间处理类 是Java 1.8 之后才有的新的日期类型, LocalDate代表日期,LocalTime代表时间 ,LocalDateTime 两者都有
//从默认时区的系统时钟中获取当前日期。
LocalDate today = LocalDate.now();
// 根据年月日取日期。月份不需要加 1
LocalDate today2 = LocalDate.of(2020,5,20);
//根据字符串取
LocalDate today3 = LocalDate.parse("2020-06-25");
//获取时间
LocalTime time= LocalTime.now();
//根据LocalDate,LocalTime ,获取日期时间
LocalDateTime localDateTime = LocalDateTime.of(today ,time);
//使用静态方法生成此对象
LocalDateTime localDateTime2 = LocalDateTime.now();
//通过 DateTimeFormatter 格式化 LocalDateTime 时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss");
localDateTime2.format(formatter);
//获取年,月,日,星期几:1对应星期1
today.getYear();
today.getMonthValue();
today.getDayOfMonth();
today.getDayOfWeek().getValue();
// 取本月第1天
LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth());
//取本月第2天,依此类推
LocalDate secondDayOfThisMonth = today.withDayOfMonth(2);
// 取本月最后一天
LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth());
//取下一天
LocalDate firstDayOfNextMonth = today.plusDays(1);
//取明年
LocalDate firstYearOfNextMonth = today.plusYears(1);
//取下个月
LocalDate firstMonthOfNextMonth = today3.plusMonths(1);
//取某年中第几天的日期
LocalDate l = LocalDate.ofYearDay(2020, 32);
//获取当前时间月份第一个周一是那一天
LocalDate firstWeekMonday = today3.with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
- LocalDateTime 与 Date 的相互转化
// Date 转化成 LocalDateTime
public static LocalDateTime dateToLocalDate(Date date) {
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
return instant.atZone(zoneId).toLocalDateTime();
}
// LocalDateTime 转化成 Date
public static Date localDateTimeToDate(LocalDateTime localDateTime) {
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = localDateTime.atZone(zoneId);
return Date.from(zdt.toInstant());
}