不推荐使用Date日期和Calendar日期-世界热头条

很神奇,为什么java中不推荐使用Date与Calendar日期了,很多时候初学者在刚学习java时,大部分使用的日期都是Date与Calendar,只有及少数个别使用的LocalDateTime日期

Date 与 Calendar存在的共性问题


【资料图】

  • 毫秒值与日期直接转换麻烦和繁琐,然后通过毫秒值来计算时间的差额步骤较多,并且还可能存在误差

  • 再有一个就是线程问题,我们都知道在创建一个Date日期变量时,它的格式不是我们能看懂的日期格式,这时候就需要使用SimpleDateFormat了,然后

    这就引发了一个问题,这个类的线程是不安全的(在做生产总览的时候,需要大量使用日期类,当时每个类我都创建了一个SimpleDateFormat,想着有点

    浪费内存空间了,然后在service层最上面定义了一个静态的日期格式类,接着就引发了一个问题,页面报错,然后查询资料才知道,多个线程

    对同一个类操作造成了格式化错误,甚至有可能引发内存泄漏,可能导致内存泄漏问题,占用过多的内存资源)

使用日期推荐LocalDate、LocalTime、LocalDateTime这三个日期类

1. LocalDate类是一个不可变的日期时间对象,表示日期,通常被视为年月日

// 获取当前年、月、日LocalDate today = LocalDate.now();// 获取年int year = today.getYear();// 获取月int month = today.getMonthValue();// 获取天int day = today.getDayOfMonth();// 获取毫秒值LocalDateTime startOfDay = localDate.atStartOfDay();long millisecondsFromDate = startOfDay.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();

2.LocalTime类是一个不可变的日期时间对象,代表一个时间,通常被看作小时-秒,时间表示为纳秒精度

// 获取当前年、月、日LocalTime time = LocalTime.now();int hour = time.getHour(); // 获取小时int minute = time.getMinute(); // 获取分钟int second = time.getSecond(); // 获取秒int nano = time.getNano(); // 获取纳秒

3.LocalDateTime是一个不可变的日期时间对象,代表日期时间,通常被视为年-月-日- 时-分-秒

LocalDateTime dateTime = LocalDateTime.now();int year = dateTime.getYear(); // 获取年份int month = dateTime.getMonthValue(); // 获取月份 (1-12)int dayOfMonth = dateTime.getDayOfMonth(); // 获取月份中的天数int hour = dateTime.getHour(); // 获取小时int minute = dateTime.getMinute(); // 获取分钟int second = dateTime.getSecond(); // 获取秒int nano = dateTime.getNano(); // 获取纳秒// 获取毫秒值// 需要将LocalDateTime变量转换为ZoneDateTime对象ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());Instant instant = zonedDateTime.toInstant();long milliseconds = instant.toEpochMilli();// 日期格式化DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String dayTime = dateTimeFormatter.format(dateTime);
方法名说明
public LocalDateTime plusYears(long years)添加或者减去年
public LocalDateTime plusMonths(long months)添加或者减去月
public LocalDateTime plusDays(long months)添加或者减去日
public LocalDateTime plusHours(long hours)添加或者减去时
public LocalDateTime plusMinutes(long minutes)添加或者减去分
public LocalDateTime plusSeconds(long seconds)添加或者减去秒
public LocalDateTime plusWeeks(long weeks)添加或者减去周

这里要注意!!根据业务需求使用不同的日期,如果前端传值为年-月-日,而后端使用了LocalDateTime日期会报无法转换的问题,这是因为LocalDateTime底层是被final修饰了无法更改,它的格式只能是年-月-日 时:分:秒,所以要使用对应的日期格式

使用示例:(获取一天中的24小时,然后使用String的format方法截取)

// 创建 DateTimeFormatter 对象,指定时间格式为 "yyyy-MM-dd HH:mm:ss"DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDate date = LocalDate.parse(dayTime);// 获取当前时间,小时取整,分和秒设为0 使用with将日期设定为指定日期,然后分与秒为0LocalDateTime now = LocalDateTime.now().with(date).withMinute(0).withSecond(0);for(int j = 0; j < 24; j++){    TbProductionLineStopDTO tbProductionLineStopDTO = new TbProductionLineStopDTO();    if(j == 23){        // 设置当前日期小时为23,并且格式化        startTime = now.withHour(23).format(formatter);        // 天数减1,并且小时设置为0        endTime = now.plusDays(1).withHour(0).format(formatter);        starHour = String.format("%02d", j);        endHour = String.format("%02d", 00);    }else{        // 创建 startTime 和 endTime 变量        startTime = now.withHour(j).format(formatter);        endTime = now.withHour(j+1).format(formatter);        starHour = String.format("%02d", j);        endHour = String.format("%02d", j+1);    }    Integer productionCount = realTimeMapper.queryTbProductPassrecord(startTime,endTime,lineCode);    if(productionCount == null){        productionCount = 0;    }    String time = starHour + "-" + endHour;    tbProductionLineStopDTO.setLineCount(productionCount);    tbProductionLineStopDTO.setTimeHour(time);    tbProductionLineStopDTOList.add(tbProductionLineStopDTO);}

标签:

最近更新

不推荐使用Date日期和Calendar日期-世界热头条
2023-05-29 17:06:16
俄方开出停火“四要求”|全球热推荐
2023-05-29 16:29:59
2023年多利科技研究报告 新能源汽车业务快速增长
2023-05-29 15:27:33
世界实时:武火(关于武火介绍)
2023-05-29 14:23:07
世界百事通!神舟十六号载人飞行任务是空间站应用与发展阶段首个载人飞行任务
2023-05-29 13:34:33
扎实举措大力提升公共法律服务品质-天天快看
2023-05-29 13:13:37
环球视点!中国银行女儿金金条价格今天多少一克(2023年05月29日)
2023-05-29 12:05:23
全球聚焦:国际供应量相对偏多 尿素价位存下探可能
2023-05-29 11:13:53
中国空间站将再次迎来太空会师_当前讯息
2023-05-29 10:46:14
聚焦:神舟十六号乘组是中国空间站进入应用与发展阶段迎来的首个乘组
2023-05-29 10:04:36
Stein: 国王助教费尔南德斯成为值得关注的猛龙主帅人选 全球今头条
2023-05-29 09:11:44
环球看热讯:2023数博会闭幕 项目签约投资金额613亿元
2023-05-29 08:30:02
看热讯:招商中证全球中国互联网ETF(QDII)净值下跌2.45% 请保持关注
2023-05-29 07:24:07
热推荐:阿曼里亚尔货币为什么这么值钱_阿曼里亚尔
2023-05-29 06:12:13
天天热文:西宁进出口总值占全省进出口总值的78%
2023-05-29 05:02:38
世界微资讯!腰旗橄榄球运动 从现象级的网红运动成为年轻人日常健身项目
2023-05-29 03:10:59
第三季首播,17位新老坞民开局坦诚相见-天天快看点
2023-05-29 02:12:37
环球今亮点!连翘的作用与功效_连翘的作用与功效是什么
2023-05-29 00:41:58
环球播报:焦点要闻:超夏天的海港小镇友谊感人清爽佳作 观焦点 世界头条
2023-05-28 22:38:31
世界热点!一图速览|逐梦蓝天!从时间轴看C919
2023-05-28 22:04:37
全球要闻:黄渤电影同名音乐剧《一出好戏》主演见面会登陆广西南宁
2023-05-28 20:40:51
iPhone 15 Pro Max仅升级A17 8G内存其余不变!
2023-05-28 19:22:05
蚂蚁庄园支付宝问答:屏住呼吸不呼气对治疗打嗝有用吗
2023-05-28 18:14:01
邯郸消费券入口_2022邯郸中秋国庆节幸福欢乐购消费券领取入口-环球微头条
2023-05-28 17:10:41
每日看点!雅马哈r6二手车市场 雅马哈r6二手车
2023-05-28 16:15:04
三星告别游戏性能管理应用Game Tuner 天天新消息
2023-05-28 15:17:02
了解唐朝的“秘密”,感受唐朝文化 天天速讯
2023-05-28 14:23:43
H&M北京三里屯旗舰店将闭店_焦点要闻
2023-05-28 13:38:05
【全球报资讯】荤素是什么意思_荤
2023-05-28 12:45:59
海南文昌市未来规划和发展,碧桂园·高隆湾PK蔚蓝海岸北方人选哪个?
2023-05-28 11:49:32