首页 > 其他分享 >关于Date、LocalDate、LocalDateTime、Timestamp等时间类型的区别?

关于Date、LocalDate、LocalDateTime、Timestamp等时间类型的区别?

时间:2023-10-12 23:45:30浏览次数:38  
标签:get Timestamp System println LocalDateTime Date Calendar calendar out

最近在代码的开发过程中发现,小组内对于实体类中的时间字段。有的用Date,有的用Timestamp,有的又用LocalDateTime,于是我就想整理一下这些时间类型有什么区别,是否可以统一?
1、Date(不推荐)
Date类型是Java8之前的时间处理类,存在一些问题比如说非线程安全问题。时区的处理比较麻烦等。
Date类型的基本使用:

Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String format = sdf.format(date);//当前时间 2023-10-12

Date类型目前许多方法已经弃用了。
2、Calendar类(不推荐)
Calendar(日历)类,主要的功能是用来日期字段间的操作,更像是对Date类的增强。里面有许多的方法,可以获取当前年份、月份、日期等等的

Calendar calendar = Calendar.getInstance();
System.out.println("年:" + calendar.get(Calendar.YEAR));//年:2023
// 初始月份是从0开始
System.out.println("月:" + (calendar.get(Calendar.MONTH)+1));//月:10
System.out.println("日:" + calendar.get(Calendar.DATE));//日:12
System.out.println("小时:" + calendar.get(Calendar.HOUR_OF_DAY));//小时:23
System.out.println("分钟:" + calendar.get(Calendar.MINUTE));//分钟:0
System.out.println("秒:" + calendar.get(Calendar.SECOND));//秒:36
System.out.println("毫秒:" + calendar.get(Calendar.MILLISECOND));//毫秒:534
System.out.println("今年的第几个星期:" + calendar.get(Calendar.WEEK_OF_YEAR));//今年的第几个星期:41
System.out.println("这个月的第几个星期:" + calendar.get(Calendar.WEEK_OF_MONTH));//这个月的第几个星期:2
System.out.println("今年的第几天:" + calendar.get(Calendar.DAY_OF_YEAR));//今年的第几天:285
System.out.println("这个月的第几天:" + calendar.get(Calendar.DAY_OF_MONTH));//这个月的第几天:12
System.out.println("这个星期的第几天:" + calendar.get(Calendar.DAY_OF_WEEK));//这个星期的第几天:5

如果有需要用到一些方法可以使用使用
3、LocalDateTime类(推荐)
LocalDate、LocalTime、LocalDateTime类是Java1.8开始对时间类进行的一次大更新,它是在java.time包中,功能十分强大。
LocalDate:用来获取日期格式(年月日)
LocalTime:用来获取时间格式(时分秒)
LocalDateTime:用来获取日期+时间的格式

 LocalDate localDate = LocalDate.now();
 LocalTime localTime = LocalTime.now();
 LocalDateTime localDateTime = LocalDateTime.now();
 System.out.println(localDate);//2023-10-12
 System.out.println(localTime);//23:13:59.259
 System.out.println(localDateTime);//2023-10-12T23:13:59.259
 System.out.println(localDateTime.getDayOfMonth());//12
 System.out.println(localDateTime.getDayOfWeek());//THURSDAY
 System.out.println(localDateTime.getMonth());//OCTOBER
 System.out.println(localDateTime.getMonthValue());//10
 System.out.println(localDateTime.getMinute());//13

LocalDateTime还提供了很多其他时间操作方法,比如说时间相加相减等等。设置时间格式也可以使用DateTimeFormatter,相比于SimpleDateFormat最大的好处就是在于DateTimeFormatter 是线程安全的。
总结
我个人是推荐使用LocalDateTime(jdk1.8),很多时候我们不知道数据与Java类型如何去对应。我推荐的方式是
date类型(日期时间格式)使用LocalDate去对应
time类型(时分秒时间格式)使用LocalTime去对应
datetime类型(完整的日期时分秒时间格式)使用LocalDateTime去对应
timestamp类型(完整的日期时分秒时间格式)使用LocalDateTime去对应

标签:get,Timestamp,System,println,LocalDateTime,Date,Calendar,calendar,out
From: https://www.cnblogs.com/great-r/p/17760881.html

相关文章

  • CudaText 编译运行c
             CudaText是一款轻量级地文本编辑开源软件。在安装codeblocks的gcc编译器后可以编译运行c。配置如下打开Tools-->config-->Add。 其中Parameters设置如下为编译和运行。{FileName} -o {FileNameNoExt}&&cmd/c{FileNameNoExt} 按快......
  • JDK8之后新增的时间-LocalDate、LocalTime、LocalDateTime、ZoneId、ZoneDateTime
    LocalDate:代表本地日期(年、月、日、星期)LocalTime:代表本地时间(时、分、秒、纳秒)LocalDateTime:代表本地日期、时间(年、月、日、星期、时、分、秒、纳秒)(其三者都可以调用now()方法,且其对象内容不一样)LocalDate:  (获取的本地对象是一个不可变对象) (注意:修改之后是创建了......
  • 解决PowerDesigner 16 Generate Datebase For Sql2005/2008 对象名sysproperties无效
    解决PowerDesigner16GenerateDatebaseForSql2005/2008对象名sysproperties无效的问题在PowerDesigner16中生成的sql语句,在执行的时候报错:对象名sysproperties无效的错误;造成此问题的原因是由于Sql2005、2008删除了系统表sysproperties而改用sys.extended_proper......
  • mysql 中 timestampdiff 一个让人费解的问题
    取当前时间 使用上面取到的时间与now()使用timestampdiff进行month级别比较 将上面取到的日期递增一个月再次比较 结果让人很费解 在此给自己提个醒,mysql单纯使用日期还是用 current_date吧......
  • 日期格式转换异常:Java 8 date/time type `java.time.LocalDateTime` not supported by
    异常信息:"unexpectederror:Typedefinitionerror:[simpletype,classjava.time.LocalDateTime];nestedexceptioniscom.fasterxml.jackson.databind.exc.InvalidDefinitionException:Java8date/timetype`java.time.LocalDateTime`notsupportedbydefault:......
  • kali-Java版本管理-update-alternatives
    kali-Java版本管理-update-alternativeshttps://blog.csdn.net/qq_44029310/article/details/126086895列出软件的所有版本update-alternatives--config软件名update-alternatives--configjava的示例输出Thereare3choicesforthealternativejava(providing/usr......
  • 解决前端传递Date类型时自动转换为国际时间的问题
    本质原因是前端对象中使用了Data类型的属性字段,在向后端传递时会自动将JSON对象转换为JSON字符串进行传递Date类型的属性在进行转换时会调用自身的toJSON方法,转换为国际时间的字符串表达形式letdate=newDate();console.log(date);console.log(JSON.stringify(date));导......
  • What causes "Invalid Address specified to RtlValidateHeap"?
    ForumVisualC++&C++ProgrammingVisualC++ProgrammingWhatcauses"InvalidAddressspecifiedtoRtlValidateHeap"?Ifthisisyourfirstvisit,besuretocheckoutthe FAQ byclickingthelinkabove.Youmayhaveto register or Login ......
  • electron+vue3+electron-updater 实现程序更新
    electron+vue3+edge调用C#.dll文件electron-edge-js用这玩意儿我血压高.....血压高的谨慎食用…文章目录electron+vue3+electron-edge-js调用C#.dll文件起步一、创建Vue3项目(ele)二、Vue3项目中添加electron模块1.添加electron-edge-js模块......
  • pydantic学习与使用-17.使用 json_encoders 格式化 datetime 类型
    前言使用datetime日期类型时,想格式化成自定义的"%Y-%m-%d%H:%M:%S"格式datetime类型frompydanticimportBaseModelfromdatetimeimportdatetime#上海悠悠wx:283340479#blog:https://www.cnblogs.com/yoyoketang/classUserInfo(BaseModel):id:intna......