数据库是DateTime类型
项目开发中:对时间的使用出现两种方式:
1.使用字符串来表示时间
2.使用Date来表示时间
1.先说说第一种方式会出现的问题:数据从后台传递到后台显示的时候不会有问题出现,但是如果前台提交数据,这个数据不是时间格式的数据的时候,不填的时候,在spring mvc中为"",导致无法插入数据库,所以需要判断是否为"",如果为"",将时间设置为null后再进行保存。
2.使用第二种方式:规范的用法是:现在实体类对应的字段中格式化输出的格式:
使用@Temporal(TemporalType.TIMESTAMP),然后前台需要显示的地方再格式化时间数据<fmt:formatDate value="${accident.createdOn}" pattern="yyyy-MM-dd HH:mm:ss"/>
3.时间的转换:时间的转换在项目中常常会用到:例如:我们需要根据两个格式化了的时间计算出两个时间相差多少,这时我们得先将时间转化成Date,然后在转换为时间出戳,然后计算得出相差多少分或者多少秒。因此一般情况下会有这几种转换:
1.date----------->格式化时间:
SimpleDateFormat format=new SimpleDateFormat("YYYY-MM-dd:HH:mm:ss:SSS");
System.out.println(format.format(new Date()));
结果是:2017-01-03:23:07:07:042
2.格式化时间转化为date:
SimpleDateFormat format=new SimpleDateFormat("YYYY-MM-dd:HH:mm:ss:SSS");
System.out.println(format.parseObject("2017-01-03:23:07:07:042"));
结果是:Sun Jan 01 23:07:07 CST 2017
3.date转化为时间戳:
System.out.println(new Date().getTime());
结果为:1483456447595
4.时间戳转date:
可以先用时间戳转格式化时间再转date:
SimpleDateFormat format=new SimpleDateFormat("YYYY-MM-dd:HH:mm:ss:SSS");
System.out.println(format.parseObject(format.format(System.currentTimeMillis())));
结果为:Sun Jan 01 23:21:06 CST 2017
一个常用的时间封装类:
package com.app.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* 日期时间工具类
*/
public class DateTimeUtil {
private DateTimeUtil() {
}
public static final String yyMMdd = "yy-MM-dd";
public static final String yyyyMMdd = "yyyy-MM-dd";
public static final String yyyyMMddHHmm = "yyyy-MM-dd HH:mm";
public static final String yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss";
/**
* String转DATE型 支持yy-MM-dd; yyyy-MM-dd; yyyy-MM-dd HH:mm; yyyy-MM-dd
* HH:mm:ss
*
* @param date
* @return
* @throws ParseException
*/
public static Date parseDate(String date) throws ParseException {
if (date == null || date.length() == 0)
throw new IllegalArgumentException("Date must not be null");
Date date2 = null;
date = date.trim();
if (date.length() == 10) {
date2 = parseDate(date, DateTimeUtil.yyyyMMdd);
} else if (date.length() == 19) {
date2 = parseDate(date, DateTimeUtil.yyyyMMddHHmmss);
} else if (date.length() == 16) {
date2 = parseDate(date, DateTimeUtil.yyyyMMddHHmm);
} else if (date.length() == 8) {
date2 = parseDate(date, DateTimeUtil.yyMMdd);
} else {
throw new IllegalArgumentException("日期格式不对,必须为:yyyy-MM-dd或者yyyy-MM-dd HH:mm:ss");
}
return date2;
}
/**
* 自定义日期格式把String转换成DATE型
*
* @param date
* @param parsePattern
* 自定义格式
* @return
* @throws ParseException
*/
public static Date parseDate(String date, String parsePattern) throws ParseException {
if (date == null || parsePattern == null)
throw new IllegalArgumentException("Date and parsePattern must not be null");
SimpleDateFormat parser = new SimpleDateFormat(parsePattern);
Date date1 = parser.parse(date);
return date1;
}
/**
* Date转String,支持格式:yyyy-MM-dd
*
* @param d
* @return
*/
public static String formatDate(Date d) {
return formatDate(d, DateTimeUtil.yyyyMMdd);
}
/**
* Date转String,支持格式:yyyy-MM-dd HH:mm
*
* @param d
* @return
*/
public static String formatShortDateTime(Date d) {
return formatDate(d, DateTimeUtil.yyyyMMddHHmm);
}
/**
* Date转String,支持格式:yyyy-MM-dd HH:mm:ss
*
* @param d
* @return
*/
public static String formatDateTime(Date d) {
return formatDate(d, DateTimeUtil.yyyyMMddHHmmss);
}
/**
* Date转String
*
* @param d
* @param parsePattern
* 自定义格式
* @return
*/
public static String formatDate(Date d, String parsePattern) {
if (d == null)
throw new IllegalArgumentException("Date and parsePattern must not be null");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(parsePattern);
String sd = simpleDateFormat.format(d);
return sd;
}
/**
* 获取当前日期
*
* @return Date
*/
public static Date getTime() {
Calendar now = Calendar.getInstance();
return now.getTime();
}
/**
* 获取当前年
*
* @return int
*/
public static int getYear() {
Calendar now = Calendar.getInstance();
now.setTime(new Date());
return now.get(Calendar.YEAR);
}
/**
* 获取当前月
*
* @return int
*/
public static int getMonth() {
Calendar now = Calendar.getInstance();
now.setTime(new Date());
return now.get(Calendar.MONTH) + 1;
}
/**
* 获取当前日期
*
* @return String
*/
public static String getNowTime() {
Calendar now = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat(DateTimeUtil.yyyyMMddHHmmss);
String str = formatter.format(now.getTime());
return str;
}
/**
* 获取当前日期
*
* @return String
*/
public static String getNowTime(String fmt) {
Calendar now = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat(fmt);
String str = formatter.format(now.getTime());
return str;
}
/**
* 获取"上午好", "下午好", "晚上好"
*
* @return String
*/
public static String getAMPM() {
String[] hello = { "上午好", "下午好", "晚上好" };
Calendar now = Calendar.getInstance();
int hour = now.get(Calendar.HOUR_OF_DAY);
int index = 0;
if (hour >= 12 && hour < 18)
index = 1;
if (hour >= 18 && hour <= 23)
index = 2;
return hello[index];
}
/**
* 获取星期
*
* @param dt
* @return
*/
public static String getWeekOfDate(Date dt) {
String[] weekDays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0)
w = 0;
return weekDays[w];
}
/* 日期操作方法 */
public static Date addYears(Date date, int amount) {
return add(date, 1, amount);
}
public static Date addMonths(Date date, int amount) {
return add(date, 2, amount);
}
public static Date addWeeks(Date date, int amount) {
return add(date, 3, amount);
}
public static Date addDays(Date date, int amount) {
return add(date, 5, amount);
}
public static Date addHours(Date date, int amount) {
return add(date, 11, amount);
}
public static Date addMinutes(Date date, int amount) {
return add(date, 12, amount);
}
public static Date addSeconds(Date date, int amount) {
return add(date, 13, amount);
}
public static Date addMilliseconds(Date date, int amount) {
return add(date, 14, amount);
}
public static Date add(Date date, int calendarField, int amount) {
if (date == null) {
throw new IllegalArgumentException("The date must not be null");
} else {
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(calendarField, amount);
return c.getTime();
}
}
public static Date setYears(Date date, int amount) {
return set(date, 1, amount);
}
public static Date setMonths(Date date, int amount) {
return set(date, 2, amount);
}
public static Date setDays(Date date, int amount) {
return set(date, 5, amount);
}
public static Date setHours(Date date, int amount) {
return set(date, 11, amount);
}
public static Date setMinutes(Date date, int amount) {
return set(date, 12, amount);
}
public static Date setSeconds(Date date, int amount) {
return set(date, 13, amount);
}
public static Date setMilliseconds(Date date, int amount) {
return set(date, 14, amount);
}
private static Date set(Date date, int calendarField, int amount) {
if (date == null) {
throw new IllegalArgumentException("The date must not be null");
} else {
Calendar c = Calendar.getInstance();
c.setLenient(false);
c.setTime(date);
c.set(calendarField, amount);
return c.getTime();
}
}
/**
* 比较两个日期相差天、分、秒
*
* @param startDate
* @param endDate
* @return
*/
public static String compare(Date startDate, Date endDate) {
StringBuilder sb = new StringBuilder();
if (null != startDate && null != endDate) {
long beginTime = startDate.getTime();
long endTime = endDate.getTime();
long diff = endTime - beginTime;
long dayMS = 86400000; // 一天=毫秒
long hourMS = 3600000; // 小时=毫秒
long minuteMS = 60000; // 分钟=毫秒
long secondMS = 1000; // 秒=毫秒
if (diff >= dayMS) {
sb.append((diff / dayMS) + "天");
long modNum = diff % dayMS; // 余数
if (modNum >= 0) {
diff = modNum;
}
}
if (diff >= hourMS) {
sb.append((diff / hourMS) + "小时");
long modNum = diff % hourMS; // 余数
if (modNum >= 0) {
diff = modNum;
}
}
if (diff >= minuteMS) {
sb.append((diff / minuteMS) + "分");
long modNum = diff % minuteMS; // 余数
if (modNum > 0) {
sb.append((modNum / secondMS) + "秒");
}
} else {
sb.append((diff / secondMS) + "秒");
}
}
return sb.toString();
}
public static void main(String[] args) throws Exception {
// System.out.println(DateTimeUtil.getYear());
// System.out.println(DateTimeUtil.getMonth());
System.out.println(compare(new Date(), DateTimeUtil.parseDate("2014-11-14 15:47:55")));
Date d = new Date();
System.out.println("start:" + DateTimeUtil.formatDate(d));
for (int i = 0; i < 6; i++) {
d = workdate(d);
}
System.out.println("end:" + DateTimeUtil.formatDate(d));
}
public static Date workdate(Date d) throws Exception {
List<String> weekList = new ArrayList<String>();
weekList.add("星期一");
weekList.add("星期二");
weekList.add("星期三");
weekList.add("星期四");
weekList.add("星期五");
List<String> wdList = new ArrayList<String>();
wdList.add("2015-04-11");
wdList.add("2015-04-12");
List<String> hdList = new ArrayList<String>();
hdList.add("2015-04-09");
hdList.add("2015-04-10");
hdList.add("2015-04-13");
d = DateTimeUtil.addDays(d, 1);
String week = DateTimeUtil.getWeekOfDate(d);
System.out.println("====" + DateTimeUtil.formatDate(d) + " - " + week);
if (weekList.contains(week)) {
if (!hdList.contains(DateTimeUtil.formatDate(d))) {
return d;
}
} else {
if (wdList.contains(DateTimeUtil.formatDate(d))) {
return d;
}
}
return workdate(d);
}
}
此类几乎可以解决大多数时间处理的问题