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的相互转换总结》对你有帮助,请点赞、收藏,并留下你的观点哦!