栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java > SpringBoot

听说你还在用Date?

SpringBoot 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

听说你还在用Date?

package com.ifilldream.rocketmq_lean.localdatatime_lean;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;


public class LocalDateTimeTest {

    

    public static void main(String[] args) throws ParseException {
 //我们举几个例子(现在是2020年01月11日)
 showDate();
 showLocalDateTime();
 showOther();
    }

    
    public static void showDate() throws ParseException {
 System.out.println("--------------Date---------------");
 Date dateNow = new Date();
 System.out.println("当前时间:" + dateNow);
 System.out.println("当前年份:" + dateNow.getYear());
 System.out.println("当前月份:" + dateNow.getMonth());
 System.out.printf("今年的第%tj%n",dateNow);
 System.out.printf("本月的第%td%n",dateNow);
 String dayOfWeek = new SimpleDateFormat("E").format(dateNow);
 System.out.println(dayOfWeek);

 //构造时间
 Date consDate  = new  Date(2020,01,11,14,14,00);
 System.out.println("构造:" + consDate);

 //日期的加减
 Calendar calendar = Calendar.getInstance();
 calendar.setTime(dateNow);
 calendar.add(Calendar.DATE, 1);
 calendar.add(Calendar.HOUR, 2);
 calendar.add(Calendar.MINUTE,3);

 calendar.add(Calendar.DATE, -1);
 calendar.add(Calendar.HOUR, -2);
 calendar.add(Calendar.MINUTE,-3);
 System.out.println("加减时间:" + calendar.getTime());

 //修改指定日期
 calendar.set(Calendar.DAY_OF_MONTH,20);
 Date withDayOfMonth = calendar.getTime();
 System.out.println("修改日期:" + withDayOfMonth);
 calendar.set(Calendar.DAY_OF_YEAR,100);
 Date withDayOfYear = calendar.getTime();
 System.out.println("修改日期:" + withDayOfYear);

 //时间比较
 boolean compareBefore = withDayOfMonth.before(withDayOfYear);
 boolean compareAfter = withDayOfMonth.after(withDayOfYear);
 boolean compareEqual = withDayOfMonth.getTime() == withDayOfYear.getTime();
 System.out.println("比较是否小于 : " + compareBefore);
 System.out.println("比较是否大于 : " + compareAfter);
 System.out.println("比较是否等于: " + compareEqual);

 //字符串转时间
 String datetime =  "2017-11-23 06:08:09";
 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //SimpleDateFormat是线程不安全的
 Date changeTime = sdf.parse(datetime); //此处还要抛异常
 System.out.println("字符串转时间: " + changeTime);

 //时间转字符串
 System.out.println("时间转字符串1: " + sdf.format(changeTime));

 //毫秒转时间
 System.out.println("毫秒转时间:" + new Date(System.currentTimeMillis()));

 //两个时间间隔
 //具体代码就不放上来了
 //参考https://blog.csdn.net/zpz2411232428/article/details/83278931
 
    }

    
    public static void showLocalDateTime(){
 System.out.println("--------------LocalDateTime---------------");
 LocalDateTime localNow = LocalDateTime.now();
 System.out.println("当前时间:" + localNow);
 System.out.println("当前年份:" + localNow.getYear() );
 System.out.println("当前月份:" + localNow.getMonth());
 int dayOfYear = localNow.getDayOfYear();
 int dayOfMonth = localNow.getDayOfMonth();
 DayOfWeek dayOfWeek = localNow.getDayOfWeek();
 System.out.println("LocalDateTime今年的第" + dayOfYear + "天");
 System.out.println("LocalDateTime本月的第" + dayOfMonth + "天");
 System.out.println("LocalDateTime星期" + dayOfWeek.getValue() + "(" + dayOfWeek + ")");

 //构造时间
 LocalDateTime consLocal = LocalDateTime.of(2020,01,11,14,14,00);
 System.out.println("LocalDateTime构造:" + consLocal);

 //日期的加减
 localNow.plusDays(1);
 localNow.plusHours(2);
 localNow.plusMinutes(3);

 localNow.minusDays(1);
 localNow.minusHours(2);
 localNow.minusMinutes(3);
 System.out.println("LocalDateTime加减时间:" + localNow);

 //修改指定日期
 LocalDateTime withDayOfMonth = localNow.withDayOfMonth(20);
 LocalDateTime withDayOfYear = localNow.withDayOfYear(100);
 System.out.println("LocalDateTime修改日期:" + withDayOfMonth);
 System.out.println("LocalDateTime修改日期:" + withDayOfYear);

 //时间比较
 boolean compareBefore = withDayOfMonth.isBefore(withDayOfYear);
 boolean compareAfter = withDayOfMonth.isAfter(withDayOfYear);
 boolean compareEqual = withDayOfMonth.isEqual(withDayOfYear);
 System.out.println("LocalDateTime比较是否小于 : " + compareBefore);
 System.out.println("LocalDateTime比较是否大于 : " + compareAfter);
 System.out.println("LocalDateTime比较是否等于: " + compareEqual);

 //字符串转时间
 String datetime =  "2017-11-23 06:08:09";
 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 LocalDateTime changeTime = LocalDateTime.parse(datetime, dtf);
 System.out.println("LocalDateTime字符串转时间: " + changeTime);

 //时间转字符串
 System.out.println("LocalDateTime时间转字符串1: " +dtf.format(changeTime));
 System.out.println("LocalDateTime时间转字符串2: " + localNow.format(DateTimeFormatter.BASIC_ISO_DATE) );
 System.out.println("LocalDateTime时间转字符串3: " + localNow.format(DateTimeFormatter.ISO_DATE) );

 //毫秒转时间
 String longToDateTime = dtf.format(LocalDateTime.ofInstant(
  Instant.ofEpochMilli(System.currentTimeMillis()), ZoneId.of("Asia/Shanghai")));
 System.out.println("LocalDateTime毫秒转时间:" + longToDateTime);

 //两个时间间隔
 Duration between = Duration.between(withDayOfMonth, withDayOfYear);
 System.out.println("时间间隔:" + between.toDays());
 System.out.println("时间间隔:" + between.toHours());

    }

    public static void showOther(){
 System.out.println("--------------LocalDate&LocalTime---------------");
 LocalDate localDate = LocalDate.of(2017, 11, 23);
 System.out.println("构造LocalDate:" + localDate);
 LocalTime localTime = LocalTime.of(8, 6, 00);
 System.out.println("构造LocalTime:" + localTime);

 LocalDate today = LocalDate.now();
 System.out.println("是否闰年:" + today.isLeapYear());

 //将年、月、日等修改为指定的值,并返回新的日期与LocalDateTime一样此处不再赘述
 //两个日期前后判断与LocalDateTime一致

 System.out.println("获取时间的纳秒:" + localTime.getNano());

//程序运行时间
 Instant startTime = Instant.now();
 //TODO do someting
 Instant endTime = Instant.now();
 Duration duration = Duration.between(startTime, endTime);
 System.out.println("程序运行:" + duration.toMillis() + "毫秒");
    }
}

运行效果如下:


可以看得出来LocalDateTime具有非常多的优势。
通过源码我们可以看出SimpleDateFormat也是不安全的,然而Date用到SimpleDateFormat的地方非常多,同时Date也是不安全的。

通过源码可以看出LocalDateTime是线程安全的。

统一首发平台为微信公众号"轻梦致新",搜索关注公众号,第一时间阅读最新内容。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/235094.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号