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, 10);
        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类

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值