天天看點

Java 時間格式化,時間解析和時間計算的記錄

一、時間的格式化:可以用時間類SimpleDateFormat 和抽象類 DateFormat。

1、SimpleDateFormat類的使用:

import java.util.Date;
import java.text.SimpleDateFormat;
public class testDate{
    public static void main(String[] args){
        Date nowTime = new Date();
        //format millisec 
        SimpleDateFormat time1 = new SimpleDateFormat("EE-yyyy-MM-dd-hh-mm-ss");
        System.out.println("before formatting: "+nowTime);
        System.out.println("after formatting: "+time1.format(nowTime));     
    }
}
           

結果:

before formatting: Wed Aug 24 16:58:03 CST 2016

after formatting: 星期三-2016-08-24-04-58-03

2、DateFormat類的使用:

import java.util.Date;
import java.text.DateFormat;
public class testDate {
    public static void main(String[] args) {
        Date nowTime = new Date();
        // four kinds of instance of DateFormat
        // short
        DateFormat shortDateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
        System.out.println(shortDateFormat.format(nowTime));

        // medium
        DateFormat mediumDateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
        System.out.println(mediumDateFormat.format(nowTime));

        // long
        DateFormat longDateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
        System.out.println(longDateFormat.format(nowTime));

        // full
        DateFormat fullDateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
        System.out.println(fullDateFormat.format(nowTime));

    }
}
           

結果:

16-8-25 下午3:52

2016-8-25 15:52:43

2016年8月25日 下午03時52分43秒

2016年8月25日 星期四 下午03時52分43秒 CST

二、時間解析

假設有一個文本字元串包含固定格式的日期對象,我們期待得到這的時間對象的毫秒形式以重塑格式。這樣從固定格式的日期對象中得到毫秒數的過程稱為時間解析。

在此過程中需要用到java.util.Date 類

import java.util.Date;
import java.text.SimpleDateFormat;

public class testDate {
    public static void main(String[] args) {
        SimpleDateFormat time = new SimpleDateFormat("MM-dd-yyyy");
        String dateStringToParse = "08-24-2016";
        try {
            Date parsedDate = time.parse(dateStringToParse);
            System.out.println("parsed date: "+parsedDate.getTime());
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }

    }
}
           

或者(*)

import java.util.Date;

import java.text.SimpleDateFormat;

public class testDate {

public static void main(String[] args) {

//SimpleDateFormat time = new SimpleDateFormat(“yyyy-MM-dd”);

String dateStringToParse = “2016-08-24”;

try {

//Date parsedDate = time.parse(dateStringToParse);

Date parsedDate=(new SimpleDateFormat(“yyyy-MM-dd”).parse(dateStringToParse));

System.out.println(“parsed date: “+parsedDate.getTime());

} catch (Exception ex) {

System.out.println(ex.getMessage());

}

}
           

}

結果:

parsed date: 1471968000000

三、時間計算

有時候我們需要對時間進行計算,這是我們需要用到Calendar類,Calendar類中的方法替代了Date類中被人唾棄的方法。

jdk中正常的年月日時分秒:

static int YEAR

訓示年的 get 和 set 的字段數字。

static int MONTH

訓示月份的 get 和 set 的字段數字。

static int DATE

get 和 set 的字段數字,訓示一個月中的某天。

static int HOUR

get 和 set 的字段數字,訓示上午或下午的小時。

static int MINUTE

get 和 set 的字段數字,訓示一小時中的分鐘

static int SECOND

get 和 set 的字段數字,訓示一分鐘中的秒。

比較有用的幾個字段:

static int DAY_OF_YEAR

get 和 set 的字段數字,訓示目前年中的天數。

static int WEEK_OF_YEAR

get 和 set 的字段數字,訓示目前年中的星期數。

static int WEEK_OF_MONTH

get 和 set 的字段數字,訓示目前月中的星期數。

static int DAY_OF_WEEK

get 和 set 的字段數字,訓示一個星期中的某天。

例子:計算某一個日期加一段時間之後得到的日期

public class testDate {
    public static void main(String[] args) {
        //SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd");
        String dateStringToParse = "2016-08-14";
        Date parsedDate=new Date();
        try {
            //Date parsedDate = time.parse(dateStringToParse);
            parsedDate=(new SimpleDateFormat("yyyy-MM-dd").parse(dateStringToParse));
            System.out.println("parsed date: "+parsedDate.getTime());
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }

        Calendar cal =Calendar.getInstance();
        cal.setTime(parsedDate);
        cal.add(Calendar.DATE, );
        SimpleDateFormat df= new SimpleDateFormat("yyyy-MM-dd");
        System.out.println("pulse 10 days: "+df.format(cal.getTime()));


    }
}
           

parsed date: 1471104000000

pulse 10 days: 2016-08-24

附SimpleDateFormat的構造函數中String 中的字元串含義:

Letter Date or Time Component Presentation Examples

G Era designator Text AD

y Year Year 1996; 96

M Month in year Month July; Jul; 07

w Week in year Number 27

W Week in month Number 2

D Day in year Number 189

d Day in month Number 10

F Day of week in month Number 2

E Day in week Text Tuesday; Tue

a Am/pm marker Text PM

H Hour in day (0-23) Number 0

k Hour in day (1-24) Number 24

K Hour in am/pm (0-11) Number 0

h Hour in am/pm (1-12) Number 12

m Minute in hour Number 30

s Second in minute Number 55

S Millisecond Number 978

z Time zone General time zone Pacific Standard Time; PST; GMT-08:00

Z Time zone RFC 822 time zon

References:

java時間格式化處理

java Calendar類