由于工作中经常要用到时间,日期,以及当前时间的毫秒值等
很多时候涉及到了它们之间的相互转换,今天就好好的总结一下.
里面的很多方法已经过时被Calendar或者DateFormat类取代
两种常用的构造方法实例:(其余的已经过时)
Date date = new Date();
// 这种构造方法传递的参数是1970年1月1日到传递时间所经历的毫秒数
Date date2 = new Date(System.currentTimeMillis());
输出的结果如下:
Sat Mar 17 10:13:23 CST 2018
Sat Mar 17 10:13:23 CST 2018
常用的初始化方法:
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=2018,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类包含了更多的信息
// 除了年月日,时分秒等基本信息还包括当前时间的毫秒值,所在时区等各种信息
初始化方法:
SimpleDateFormat sdf =new SimpleDateFormat("yyyyMMddHHmmssS");
这里简单介绍日期类型常用的format格式:
1.yyyy指的是年(类似于2018), 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();
接下来就是各种的转换过程:
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();
}
Calendar calendar = Calendar.getInstance();
//这里需要注意一下,calendar传入的月份,是从0开始计数的(也就是说,2月相当于实际的三月)
calendar.set(2018, 2, 17);
System.out.println(calendar.getTimeInMillis());
首先回忆一下,Date类型本来是长这个样子的:
Sat Mar 17 13:24:30 CST 2018
Date date = new Date();
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(date));
转换过后的结果是这样的:
2018-03-17 13:28:41
从结果上看,还是挺美观的吧~
可能我们平时还会有这样的需求,要将普通的Date格式转换成精确到秒的格式:
类似于这样的20180317133112
表达的含义是2018年3月17日13时31分12秒
这种情况该如何做呢?
Date date = new Date();
SimpleDateFormat sdf =new SimpleDateFormat("yyyyMMddHHmmss");
System.out.println(sdf.format(date));
稍微调整一下format格式就可以做到啦!
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
Calendar calendar = Calendar.getInstance();
calendar.getTime();
String str="2018-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 block
e.printStackTrace();
}
执行完毕的结果是这样的:
Sat Mar 17 00:00:00 CST 2018
String str="2018-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);
工作中遇到的几个小需求
/**
* 根据时间的毫秒值来获取当天的日期 日期格式 :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);
}
/**
* 将字符串格式的时间转为秒的值
*
* @param dateTime
* 字符串时间(格式:2018-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("2018-08-30 00:00:03.500");
Long l2 = getLongFromString("2018-08-30 00:01:03.600");
System.out.println(l2 - l );
这两个时间戳正常的结果应该是 相差: 60100毫秒
但是现在计算输出的结果变成了 相差 : 60000毫秒
已经实现了该需求 !
/**
* 将传入的字符串日期 标准化输出
* 传入参数 : 20180830 结果 : 2018-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 "";
}
}
如上:就是我能想到的一些互相转换的方式了,
以后如果在工作中在应用到新的在持续进行更新,
希望能对大家有所帮助!