java時間,日期,毫秒值,String的相互轉換總結
阿新 • • 發佈:2019-02-04
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 2018
Sat Mar 17 10:13:23 CST 2018
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=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類包含了更多的資訊
// 除了年月日,時分秒等基本資訊還包括當前時間的毫秒值,所在時區等各種資訊
3. DateFormat類
初始化方法:
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();
接下來就是各種的轉換過程:
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(2018, 2, 17);
System.out.println(calendar.getTimeInMillis());
接下來介紹Date型別如何轉變成指定format格式的日期型別
首先回憶一下,Date型別本來是長這個樣子的:
Sat Mar 17 13:24:30 CST 2018
1.Date型別轉變成年月日時分秒的format格式
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格式就可以做到啦!
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="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
2.String轉換為Calendar型別
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);
幾個小的案例
工作中遇到的幾個小需求
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
* 字串時間(格式: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;
}
做一個測試 :
Long 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毫秒
已經實現了該需求 !
3. 將給定的日期格式變成我們想要的日期格式
/**
* 將傳入的字串日期 標準化輸出
* 傳入引數 : 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 "";
}
}
如上:就是我能想到的一些互相轉換的方式了,
以後如果在工作中在應用到新的在持續進行更新,
希望能對大家有所幫助!