失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java时间 日期 毫秒值 String的相互转换总结

java时间 日期 毫秒值 String的相互转换总结

时间:2023-12-05 17:33:52

相关推荐

java时间 日期 毫秒值 String的相互转换总结

java时间日期的各种转换总结以及应用实例

由于工作中经常要用到时间,日期,以及当前时间的毫秒值等

很多时候涉及到了它们之间的相互转换,今天就好好的总结一下.

首先基本介绍一下java中有关时间,日期的类

1. Date类

里面的很多方法已经过时被Calendar或者DateFormat类取代

两种常用的构造方法实例:(其余的已经过时)

Date date = new Date();// 这种构造方法传递的参数是1970年1月1日到传递时间所经历的毫秒数Date date2 = new Date(System.currentTimeMillis());

输出的结果如下:Sat Mar 17 10:13:23 CST Sat Mar 17 10:13:23 CST

2. Calendar类

常用的初始化方法:

Calendar calendar = Calendar.getInstance();

// 返回的结果:java.util.GregorianCalendar[time=1521253372638,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=,MONTH=2,WEEK_OF_YEAR=11,WEEK_OF_MONTH=3,DAY_OF_MONTH=17,DAY_OF_YEAR=76,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=3,AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=22,SECOND=52,MILLISECOND=638,ZONE_OFFSET=28800000,DST_OFFSET=0]// 从结果中可以看到,相比于Date类,Calendar类包含了更多的信息// 除了年月日,时分秒等基本信息还包括当前时间的毫秒值,所在时区等各种信息

3. DateFormat类

初始化方法:

SimpleDateFormat sdf =new SimpleDateFormat("yyyyMMddHHmmssS");

这里简单介绍日期类型常用的format格式:

1.yyyy指的是年(类似于), yy指的是年的后两位(类似于18)2.大写的MM指的是月份,小写的mm指的是分钟3.dd指的是天4.大写的HH表示的是24小时制,hh表示的是12小时制5.ss指的是秒,ssS指的是精确到毫秒6.为了看起来更容易辨认,可以在format格式部分使用诸如:之类的符号进行分隔

返回结果:java.text.SimpleDateFormat@bcd152f3// 返回的结果是这个类的名字 + 这个类的hash码,因为没有重写toString()方法.// 即getClass().getName() + "@" + Integer.toHexString(hashCode())

对三种时间日期常用类就介绍到这里,

下面主要通过实际应用来了解这几种类之间的相互转换

首先介绍当前时间毫秒值的获取方式

Long l = System.currentTimeMillis();Long time = new Date().getTime();Long millis = Calendar.getInstance().getTimeInMillis();

接下来就是各种的转换过程:

1. Date类型转变成对应时间的毫秒值

Date date = new Date();SimpleDateFormat sdf =new SimpleDateFormat("yyMMddHHmm");try {Date d = sdf.parse("1803170000");System.out.println(d.getTime());} catch (ParseException e) {e.printStackTrace();}

2.Calendar类型转变成对应时间的毫秒值

Calendar calendar = Calendar.getInstance();//这里需要注意一下,calendar传入的月份,是从0开始计数的(也就是说,2月相当于实际的三月)calendar.set(, 2, 17); System.out.println(calendar.getTimeInMillis());

接下来介绍Date类型如何转变成指定format格式的日期类型

首先回忆一下,Date类型本来是长这个样子的:

Sat Mar 17 13:24:30 CST

1.Date类型转变成年月日时分秒的format格式

Date date = new Date();SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(sdf.format(date));

转换过后的结果是这样的:

-03-17 13:28:41

从结果上看,还是挺美观的吧~

可能我们平时还会有这样的需求,要将普通的Date格式转换成精确到秒的格式:

类似于这样的0317133112

表达的含义是3月17日13时31分12秒

这种情况该如何做呢?

Date date = new Date();SimpleDateFormat sdf =new SimpleDateFormat("yyyyMMddHHmmss");System.out.println(sdf.format(date));

稍微调整一下format格式就可以做到啦!

Date类型和Calendar类型之间的相互转换

1.Date类型转换为Calendar类型

Calendar calendar = Calendar.getInstance();calendar.setTime(new Date());

2.Calendar类型转换为Date类型

Calendar calendar = Calendar.getInstance();calendar.getTime();

接下来介绍指定的String format格式转变为Date,Calendar类型

1.String转换为Date类型

String str="-3-17";SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");try {Date birthday = sdf.parse(str);System.out.println(birthday);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}

执行完毕的结果是这样的:

Sat Mar 17 00:00:00 CST

2.String转换为Calendar类型

String str="-3-17";SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");Date date = null;try {date = sdf.parse(str);} catch (ParseException e) {e.printStackTrace();}Calendar calendar = Calendar.getInstance();calendar.setTime(date);System.out.println(calendar);

几个小的案例

工作中遇到的几个小需求

1. 根据毫秒值来获取当前的日期

/*** 根据时间的毫秒值来获取当天的日期 日期格式 :yyyy-MM-dd* @param timeMillies(时间的毫秒值)* @return*/public static String getStringDate(Long timeMillies){Date date = new Date();date.setTime(timeMillies);SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");return sdf.format(date);}

2. 将毫秒格式的字符串转变成当前的秒数(也就是降低精度)

/*** 将字符串格式的时间转为秒的值** @param dateTime* 字符串时间(格式:-08-29 23:59:46.08)* @return*/public static Long getLongFromString(String dateTime) {try {/*** 将字符串数据转化为秒数*/SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小时制if (dateTime == null || dateTime.equals("")){return null;}return simpleDateFormat.parse(dateTime).getTime();} catch (Exception e ) {return null;}

做一个测试 :

g l =getLongFromString("-08-30 00:00:03.500");Long l2 = getLongFromString("-08-30 00:01:03.600");System.out.println(l2 - l );

这两个时间戳正常的结果应该是 相差: 60100毫秒但是现在计算输出的结果变成了 相差 : 60000毫秒已经实现了该需求 !

3. 将给定的日期格式变成我们想要的日期格式

/*** 将传入的字符串日期 标准化输出* 传入参数 : 0830 结果 : -08-30* @param str* @return*/public static String getFormatDate(String str){SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); //传入参数的format格式SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); //输出结果的format格式try {Date date = sdf.parse(str.trim());return dateFormat.format(date);} catch (ParseException e) {return "";}}

如上:就是我能想到的一些互相转换的方式了,

以后如果在工作中在应用到新的在持续进行更新,

希望能对大家有所帮助!

如果觉得《java时间 日期 毫秒值 String的相互转换总结》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。