一、SimpleDateFormat格式化输出时间字符串
/**
* yyyy年MM月dd日HH时mm分ss秒SSS毫秒
*/
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date date = new Date();
System.out.println("输出常规格式的时间:" + date);
// 时间转格式化字符串
System.out.println("输出格式化的时间:" + sdf.format(date));
二、SimpleDateFormat标准格式字符串转时间
// 字符串转时间
String timeStr = "2020-05-14 22:11:15.123";
// 可能会抛格式转换异常ParseException
Date date1 = null;
try {
date1 = sdf.parse(timeStr);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("字符串转时间:" + date1);
三、System.currentTimeMillis()输出当前毫秒值
// 获取当前毫秒数
long currentMillis = System.currentTimeMillis();
System.out.println("当前毫秒值:" + currentMillis);
四、Calendar的使用场景
// 使用静态方法实例化
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date date2 = calendar.getTime();
System.out.println("输出当前时间" + sdf1.format(date2));
// 获取前一年
int proYear = calendar.get(Calendar.YEAR) - 1;
// 获取前一月,注意月份是从0开始算起
// calendar.get(Calendar.Month) 五月份,则为4
int proMonth = calendar.get(Calendar.MONTH) - 1;
// 获取前一天
int proDay = calendar.get(Calendar.DAY_OF_MONTH) - 1;
// 获取前一小时
int proHour = calendar.get(Calendar.HOUR_OF_DAY) - 1;
// 获取前一分钟
int proMinute = calendar.get(Calendar.MINUTE) - 1;
// 获取前一秒
int proSecond = calendar.get(Calendar.SECOND) -1;
calendar.set(proYear, proMonth, proDay, proHour, proMinute, proSecond);
Date date3 = calendar.getTime();
System.out.println("输出当前时间的前一年前一个月前一天"
+ "前一小时前一分钟前一秒" + sdf1.format(date3));
五、通过时间获取唯一ID
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmssSSS");
SecureRandom sr = new SecureRandom();
// 通过安全随机数获取num值,可能为负数
int num = sr.nextInt();
StringBuffer sb = new StringBuffer();
// 拼接当前时间
sb.append(sdf2.format(new Date()));
// 拼接6位的安全随机数,去除首位的负号,缺少的尾数在后面补齐0
StringBuffer sb2 = new StringBuffer().append(num).append("000000");
sb.append(sb2.substring(1,7));
System.out.println(sb.toString());
六、jdk8的日期时间api的使用
因为jdk8对日期时间的api进行了优化,使用更加方便,无歧义,同时保证线程安全,建议使用。
有如下常用类。
Clock(时钟)
ZoneId(时区)
Instant(瞬时时间)
Duration(时间段)
LocalTime(当前时间)
LocalDate(当前日期)
LocalDateTime(当前日期时间)
DateTimeFormatter(时间格式)
OffsetDateTime(带偏移量的日期时间)
ZonedDateTime(带时区的日期时间)
样例:
// 时钟
Clock clock = Clock.systemUTC();
Instant currInstant = clock.instant();
// 时区
ZoneId zone = clock.getZone();
String zoneId = zone.getId();
System.out.println("时区id:"+zoneId);
// 瞬时时间
Instant instant = Instant.now();
long second = instant.getEpochSecond();
long naco = instant.getNano();
System.out.println("当前秒:"+second);
System.out.println("当前毫秒:"+naco);
// jdk8的时间
System.out.println("##########################");
LocalTime localTime = LocalTime.now();
System.out.println("当前时间:"+localTime);
System.out.println("当前小时数:"+localTime.getHour());
System.out.println("当前分钟数:"+localTime.getMinute());
System.out.println("当前秒数:"+localTime.getSecond());
System.out.println("当前纳秒数:"+localTime.getNano());
LocalTime localTime1 = localTime.plusHours(1).plusMinutes(1).plusSeconds(1).plusNanos(1);
System.out.println("增加时分秒后的时间:"+localTime1);
LocalTime localTime2 = localTime.minusHours(1).minusMinutes(1).minusSeconds(1).minusNanos(1);
System.out.println("减去时分秒后的时间:"+localTime2);
System.out.println("比较时间"+localTime.compareTo(localTime1)
+":"+localTime.compareTo(localTime)
+":"+localTime.compareTo(localTime2));
System.out.println("##########################");
// jdk8的日期
LocalDate localDate = LocalDate.now();
System.out.println("当前日期:"+localDate);
System.out.println("当前年份:"+localDate.getYear());
System.out.println("当前月份:"+localDate.getMonth().name()+":"+localDate.getMonth().getValue());
System.out.println("当前日份:"+localDate.getDayOfMonth());
LocalDate localDate1 = localDate.plusYears(1).plusMonths(1).plusDays(1);
System.out.println("增加了年月日后的日期:"+localDate1);
LocalDate localDate2 = localDate.minusYears(1).minusMonths(1).minusDays(1);
System.out.println("减去了年月日的时间:"+localDate2);
System.out.println("比较日期:"+localDate.compareTo(localDate1)
+":"+localDate.compareTo(localDate)
+":"+localDate.compareTo(localDate2));
System.out.println("##########################");
// jdk8的日期时间
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("当前日期时间的年份:"+localDateTime.getYear());
System.out.println("当前日期时间的月份:"+localDateTime.getMonth().name()+":"+localDateTime.getMonth().getValue());
System.out.println("当前日期时间的日份:"+localDateTime.getDayOfMonth());
System.out.println("当前日期时间的小时:"+localDateTime.getHour());
System.out.println("当前日期时间的分钟:"+localDateTime.getMinute());
System.out.println("当前日期时间的秒:"+localDateTime.getSecond());
System.out.println("当前日期时间的纳秒:"+localDateTime.getNano());
System.out.println("##########################");
// jdk8带时区的日期时间
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println("获取当前时区:"+zonedDateTime.getZone());
System.out.println("##########################");
// jdk8中日期时间格式化工具类
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss.SSS");
String str = dateTimeFormatter.format(localDateTime);
System.out.println("日期转换为字符串:"+str);
LocalDateTime localDateTime2 = LocalDateTime.parse("23-07-2021 11:49:00.111", dateTimeFormatter);
System.out.println("字符串转为日期:"+localDateTime2.toString());
// 时间段
Duration duration = Duration.between(localDateTime, localDateTime2);
System.out.println("间隔时间段:"+duration.getSeconds()+"(秒)");
// 获取当天最小时间
LocalDateTime localDateTime3 = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
// 获取当天最大时间
LocalDateTime localDateTime4 = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
// 获取这周最小时间
LocalDateTime localDateTime5 = LocalDateTime.of(LocalDate.now().with(DayOfWeek.MONDAY), LocalTime.MIN);
// 获取这周最大时间
LocalDateTime localDateTime6 = LocalDateTime.of(LocalDate.now().with(DayOfWeek.SUNDAY), LocalTime.MAX);
// 获取这月最小时间
LocalDateTime localDateTime7 = LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()), LocalTime.MIN);
// 获取这月最大时间
LocalDateTime localDateTime8 = LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()), LocalTime.MAX);
// 获取今年最小时间
LocalDateTime localDateTime9 = LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.firstDayOfYear()), LocalTime.MIN);
// 获取今年最大时间
LocalDateTime localDateTime10 = LocalDateTime.of(LocalDate.now().with(TemporalAdjusters.lastDayOfYear()), LocalTime.MAX);
// 获取当天,当周,当月,最小时间和最大时间
System.out.println("今天最小时间:" + localDateTime3 + ",今天最大时间:" + localDateTime4);
System.out.println("这周最小时间:" + localDateTime5 + ",这周最大时间:" + localDateTime6);
System.out.println("本月最小时间:" + localDateTime7 + ",本月最大时间:" + localDateTime8);
System.out.println("今年最小时间:" + localDateTime9 + ",今年最大时间:" + localDateTime10);
七、LocalDateTime、OffsetDateTime、ZonedDateTime
LocalDateTime、OffsetDateTime、ZonedDateTime互转