雖然網上有什麼date4j,但是jar太糾結了,先給出源碼,可以繼承到自己的util包中,作為一個資深程式員,我相信都有不少好的util工具類,我也希望經過此次分享,能帶動技術大牛們能分享出自己的好用的工具類。
先看源碼
[java] view plain copy print ?
- package com.ansitech.core.system;
- import java.io.Serializable;
- import java.text.DateFormat;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import java.util.Date;
- public class DateTime implements Serializable {
- public static final String DEFAULT_DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd HH:mm:ss";
- public static final String DEFAULT_DATE_TIME_HHmm_FORMAT_PATTERN = "yyyy-MM-dd HH:mm";
- public static final String DEFAULT_DATE_TIME_HH_FORMAT_PATTERN = "yyyy-MM-dd HH";
- public static final String DEFAULT_DATE_FORMAT_PATTERN = "yyyy-MM-dd";
- public static final String DEFAULT_TIME_FORMAT_PATTERN = "HH:mm:ss";
- public static final String DEFAULT_TIME_HHmm_FORMAT_PATTERN = "HH:mm";
- public static final int YEAR_FIELD = java.util.Calendar.YEAR;
- public static final int MONTH_FIELD = java.util.Calendar.MONTH;
- public static final int DAY_FIELD = java.util.Calendar.DATE;
- public static final int HOUR_FIELD = java.util.Calendar.HOUR_OF_DAY;
- public static final int MINUTE_FIELD = java.util.Calendar.MINUTE;
- public static final int SECOND_FIELD = java.util.Calendar.SECOND;
- public static final int MILLISECOND_FIELD = java.util.Calendar.MILLISECOND;
- private java.util.Calendar c; //月曆類
- public DateTime() {
- c = Calendar.getInstance();
- c.clear();
- }
- public DateTime(java.util.Date date) {
- c = Calendar.getInstance();
- c.setTime(date);
- }
- public DateTime(java.util.Calendar calendar) {
- this.c = calendar;
- }
- public static DateTime now() {
- Calendar calendar = Calendar.getInstance();
- return new DateTime(calendar);
- }
- public DateTime(long milliseconds) {
- c = Calendar.getInstance();
- c.setTimeInMillis(milliseconds);
- }
- public Date toDate() {
- return c.getTime();
- }
- public java.util.Calendar toCalendar() {
- return c;
- }
- public java.sql.Date toSqlDate() {
- return new java.sql.Date(c.getTimeInMillis());
- }
- public java.sql.Time toSqlTime() {
- return new java.sql.Time(c.getTimeInMillis());
- }
- public java.sql.Timestamp toSqlTimestamp() {
- return new java.sql.Timestamp(c.getTimeInMillis());
- }
- public static DateTime parseTime(String time) throws java.text.ParseException {
- try {
- return DateTime.parseDateTime(time, DateTime.DEFAULT_TIME_FORMAT_PATTERN);
- } catch (ParseException e) {
- return DateTime.parseDateTime(time, DateTime.DEFAULT_TIME_HHmm_FORMAT_PATTERN);
- }
- }
- public static DateTime parseDate(String date) throws java.text.ParseException {
- return DateTime.parseDateTime(date, DateTime.DEFAULT_DATE_FORMAT_PATTERN);
- }
- public static DateTime parseDateTime(String datetime) throws java.text.ParseException {
- DateTime result = null;
- //嘗試按yyyy-MM-dd HH:mm:ss分析
- try {
- result = DateTime.parseDateTime(datetime, DateTime.DEFAULT_DATE_TIME_FORMAT_PATTERN);
- } catch (ParseException e) {
- //解析錯誤
- result = null;
- }
- //嘗試按yyyy-MM-dd HH:mm分析
- if (null == result) {
- try {
- result = DateTime.parseDateTime(datetime, DateTime.DEFAULT_DATE_TIME_HHmm_FORMAT_PATTERN);
- } catch (ParseException e) {
- //解析錯誤
- result = null;
- }
- }
- //嘗試按yyyy-MM-dd HH分析
- if (null == result) {
- try {
- result = DateTime.parseDateTime(datetime, DateTime.DEFAULT_DATE_TIME_HH_FORMAT_PATTERN);
- } catch (ParseException e) {
- //解析錯誤
- result = null;
- }
- }
- //嘗試按yyyy-MM-dd分析
- if (null == result) {
- try {
- result = DateTime.parseDate(datetime);
- } catch (ParseException e) {
- //解析錯誤
- result = null;
- }
- }
- //嘗試按時間分析
- if (null == result) {
- result = DateTime.parseTime(datetime);
- }
- return result;
- }
- public static DateTime parseDateTime(String datetime, String pattern) throws java.text.ParseException {
- SimpleDateFormat fmt = (SimpleDateFormat) DateFormat.getDateInstance();
- fmt.applyPattern(pattern);
- return new DateTime(fmt.parse(datetime));
- }
- public String toDateString() {
- return toDateTimeString(DateTime.DEFAULT_DATE_FORMAT_PATTERN);
- }
- public String toTimeString() {
- return toDateTimeString(DateTime.DEFAULT_TIME_FORMAT_PATTERN);
- }
- public String toDateTimeString() {
- return toDateTimeString(DateTime.DEFAULT_DATE_TIME_FORMAT_PATTERN);
- }
- public String toDateTimeString(String pattern) {
- SimpleDateFormat fmt = (SimpleDateFormat) DateFormat.getDateInstance();
- fmt.applyPattern(pattern);
- return fmt.format(c.getTime());
- }
- public int get(int field) {
- //月份需要+1(月份從0開始)
- if (DateTime.MONTH_FIELD == field) {
- return c.get(field) + 1;
- } else {
- return c.get(field);
- }
- }
- public long getTimeInMillis() {
- return c.getTimeInMillis();
- }
- public void set(int field, int value) {
- //月份需要-1(月份從0開始)
- if (DateTime.MONTH_FIELD == field) {
- c.set(field, value - 1);
- } else {
- c.set(field, value);
- }
- }
- public void set(int year, int month, int day) {
- set(DateTime.YEAR_FIELD, year);
- set(DateTime.MONTH_FIELD, month);
- set(DateTime.DAY_FIELD, day);
- }
- public void set(int year, int month, int day, int hour) {
- set(year, month, day);
- set(DateTime.HOUR_FIELD, hour);
- }
- public void set(int year, int month, int day, int hour, int minute) {
- set(year, month, day, hour);
- set(DateTime.MINUTE_FIELD, minute);
- }
- public void set(int year, int month, int day, int hour, int minute, int second) {
- set(year, month, day, hour, minute);
- set(DateTime.SECOND_FIELD, second);
- }
- public void set(int year, int month, int day, int hour, int minute, int second, int milliSecond) {
- set(year, month, day, hour, minute, second);
- set(DateTime.MILLISECOND_FIELD, milliSecond);
- }
- public void add(int field, int amount) {
- c.add(field, amount);
- }
- public void reduce(int field, int amount) {
- c.add(field, -amount);
- }
- public boolean after(Object when) {
- if (when instanceof DateTime) {
- return c.after(((DateTime) when).c);
- }
- return c.after(when);
- }
- public boolean before(Object when) {
- if (when instanceof DateTime) {
- return c.before(((DateTime) when).c);
- }
- return c.before(when);
- }
- @Override
- public Object clone() {
- return new DateTime((Calendar) c.clone());
- }
- @Override
- public int hashCode() {
- return c.hashCode();
- }
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof DateTime) {
- return c.equals(((DateTime) obj).toCalendar());
- }
- if (obj instanceof Calendar) {
- return c.equals(obj);
- }
- if (obj instanceof java.util.Date) {
- return c.getTime().equals(obj);
- }
- return false;
- }
- }
接下來再來看看如何使用:
擷取目前系統時間:DateTime.now(); 傳回的是一個DateTime對象。
一個DateTime對象可以轉換成我們需要的各種日期格式,
例如:Java.util.date
[java] view plain copy print ?
- DateTime.now().toDate();
大家可能也覺得這個寫法還沒有直接new Date();來得快對不對。
那麼有很多情況是一個字元串,需要轉換成java.util.Date對象,我們該怎麼做呢?
[java] view plain copy print ?
- <pre name="code" class="java">new DateTime("2014-10-29").toDate();
當然也可以是這樣的 [java] view plain copy print ?
- new DateTime("2014-10-29 15:19:23").toDate();
這裡的隻是基礎用法,還有一些情況是将java.util.Date轉換成字元串格式的
可能大家一般會用SimpleDateFormat,但是這個太費事了,我們看看簡單的辦法。
[java] view plain copy print ?
- new DateTime(new Date()).toDateString();
傳回的是 2014-10-29 這種格式的字元串 [java] view plain copy print ?
- new DateTime(new Date()).toDateTimeString();
傳回的是2014-10-29 15:23:23 這種格式的字元串
如果我們需要類似 2014年10月29日 或 2014年10月29日 15時23分34秒 這種格式的怎麼辦呢
[java] view plain copy print ?
- new DateTime(new Date()).toDateTimeString("yyyy年MM月dd日");
- new DateTime(new Date()).toDateTimeString("yyyy年MM月dd日 hh時mm分ss秒");