SimpleDateFormat和Calendar以及jdk8替代品的常用场景

一、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互转

八、微信支付使用的rfc3339时间格式转换

Java 时间转rfc3339标准格式

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值