天天看点

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类