package com.atom.util;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class DateUtil {
public final static String DEF_DATE_FORMAT = "yyyy/MM/dd";
public final static String DEF_TIME_FORMAT = "kk:mm";
public final static String DEF_DATE_TIME = "yyyy/MM/dd HH:mm";
public final static String ORA_DATE_FORMAT = "yyyy-MM-dd";
public final static String ORA_TIME_FORMAT = "HH24:MI";
public final static String ORA_DATE_TIME = "YYYY-MM-DD HH24:MI";
public final static String ORA_DATE_TIME_FORMAT = "yyyyMMddHHMM";
public final static String SQL_DATE_TIME_FORMAT_LIMIT = "yyyy-MM-dd HH:mm:ss";
public final static String FILE_INDENTIFY_FORMAT = "yyyyMMddHHmmss";
public final static long ONE_DAY = 24*60*60*1000;
/**
* Get Long object from default format string
*
* @param dateStr
* @return
*/
public static Long strToLong(String dateStr) {
try {
SimpleDateFormat formatDate = new SimpleDateFormat(DEF_DATE_FORMAT);
ParsePosition pos = new java.text.ParsePosition(0);
Date tempDate = formatDate.parse(dateStr, pos);
return new Long(tempDate.getTime());
} catch (Exception e) {
return null;
}
}
/**
* 方法 getBetweenDays 得到两个日期的间隔天数
*
* @param endDate
* 时间字符串1,如:2001-07-17 11:00:00
* @param startDate
* 时间字符串2,如:2001-12-31 11:00:00
* @return long 间隔天数(long)
*/
public static long getBetweenDays(String endDate, String startDate) {
if (endDate == null || startDate == null)
return -1;
if (endDate.length() < 10 || startDate.length() < 10)
return -1;
int startYear = 2001, startMonth = 12, startDay = 31;
int endYear = 2001, endMonth = 12, endDay = 31;
try {
startYear = Integer.parseInt(endDate.substring(0, 4));
startMonth = Integer.parseInt(endDate.substring(5, 7));
startDay = Integer.parseInt(endDate.substring(8, 10));
endYear = Integer.parseInt(startDate.substring(0, 4));
endMonth = Integer.parseInt(startDate.substring(5, 7));
endDay = Integer.parseInt(startDate.substring(8, 10));
} catch (NumberFormatException e) {
} catch (Exception e) {
}
Calendar startCalendar = Calendar.getInstance();
Calendar endCalendar = Calendar.getInstance();
startCalendar.set(startYear, startMonth - 1, startDay, 1, 0, 0);
endCalendar.set(endYear, endMonth - 1, endDay, 0, 0, 0);
Date endDateTemp = startCalendar.getTime();
Date startDateTemp = endCalendar.getTime();
long startTime = endDateTemp.getTime();
long endTime = startDateTemp.getTime();
long times = startTime - endTime;
// long days = Math.abs(times / ( 1000 *
// 3600 * 24
// ));
long days = times / (1000 * 3600 * 24);
return days;
}
/**
* 方法 getAfterDate 得到与指定日期相差指定天数的日期
*
* @param baseDate
* 时间字符串,如:2001-07-17 11:00:00
* @param dayCount
* 向前或向后的天数,向后为正数,向前为负值
* @return 处理后的日期字符串
*/
public static String getAfterDate(String baseDate, int dayCount) {
int year = Integer.parseInt(baseDate.substring(0, 4));
int month = Integer.parseInt(baseDate.substring(5, 7));
int date = Integer.parseInt(baseDate.substring(8, 10));
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, date);
calendar.add(Calendar.DATE, dayCount);
Date _date = calendar.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(_date);
return dateString;
}
public static Date addDays(Date baseDate,int addDaysNum){
return new Date(baseDate.getTime()+3*ONE_DAY);
}
public static String parse(String baseDate) {
String dateString = baseDate;
baseDate = baseDate.trim().toLowerCase();
try {
if (baseDate.length() == 11) {
dateString = baseDate.substring(7);
if (baseDate.substring(3, 6).equals("jan"))
dateString += "-01-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("feb"))
dateString += "-02-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("mar"))
dateString += "-03-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("apr"))
dateString += "-04-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("may"))
dateString += "-05-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("jun"))
dateString += "-06-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("jul"))
dateString += "-07-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("aug"))
dateString += "-08-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("sep"))
dateString += "-09-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("oct"))
dateString += "-10-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("nov"))
dateString += "-11-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("dec"))
dateString += "-12-" + baseDate.substring(0, 2);
else
dateString = baseDate;
} else if (baseDate.length() > 11) {
dateString = baseDate.substring(7, 11);
if (baseDate.substring(3, 6).equals("jan"))
dateString += "-01-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("feb"))
dateString += "-02-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("mar"))
dateString += "-03-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("apr"))
dateString += "-04-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("may"))
dateString += "-05-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("jun"))
dateString += "-06-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("jul"))
dateString += "-07-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("aug"))
dateString += "-08-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("sep"))
dateString += "-09-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("oct"))
dateString += "-10-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("nov"))
dateString += "-11-" + baseDate.substring(0, 2);
else if (baseDate.substring(3, 6).equals("dec"))
dateString += "-12-" + baseDate.substring(0, 2);
else
dateString = baseDate;
if (!dateString.equals(baseDate)) {
dateString += baseDate.substring(11);
}
}
} catch (Exception ex) {
dateString = baseDate;
}
return dateString;
}
/**
* 方法 getBeforeDate 得到与指定日期之前相差指定天数的日期
*
* @param baseDate
* 时间字符串,如:2001-07-17 11:00:00
* @param dayCount
* 向前的天数
* @return 相减后的日期字符串
*/
public static String getBeforeDate(String baseDate, int dayCount) {
return getAfterDate(baseDate, -dayCount);
}
/**
* 方法 getAfterMonth 得到与指定日期相差指定月数的日期
*
* @param baseDate
* 时间字符串,如:2001-07-17 11:00:00
* @param monthCount
* 向前或向后的月数,向后为正数,向前为负值
* @return 相加后的日期字符串
*/
public static String getAfterMonth(String baseDate, int monthCount) {
int year = Integer.parseInt(baseDate.substring(0, 4));
int month = Integer.parseInt(baseDate.substring(5, 7));
int date = Integer.parseInt(baseDate.substring(8, 10));
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, date);
calendar.add(Calendar.MONTH, monthCount);
Date _date = calendar.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(_date);
return dateString;
}
/**
* 方法 getBeforeMonth 得到与指定日期之前相差指定月数的日期
*
* @param baseDate
* 时间字符串,如:2001-07-17 11:00:00
* @param monthCount
* 向前的月数
* @return 相减后的日期字符串
*/
public static String getBeforeMonth(String baseDate, int monthCount) {
return getAfterMonth(baseDate, -monthCount);
}
/**
* 方法 getEndDate 得到与指定日期相差指定月数并减去一天的日期
*
* @param baseDate
* 时间字符串,如:2001-07-17 11:00:00
* @param monthCount
* 向前或向后的月数,向后为正数,向前为负值
* @return 相加后的日期字符串
*/
public static String getEndDate(String baseDate, int monthCount) {
// int year =
// Integer.parseInt(baseDate.substring(0,4));
// int month =
// Integer.parseInt(baseDate.substring(5,7));
int day = Integer.parseInt(baseDate.substring(8, 10));
String endDate = getAfterMonth(baseDate, monthCount);
// int endYear =
// Integer.parseInt(endDate.substring(0,4));
// int endMonth =
// Integer.parseInt(endDate.substring(5,7));
int endDay = Integer.parseInt(endDate.substring(8, 10));
// 说明日期没变
if (endDay == day) {
// 月数为正则为减一天
if (monthCount > 0) {
endDate = getAfterDate(endDate, -1);
} else {
endDate = getAfterDate(endDate, 1);
}
} else { // 日期已变
if (monthCount < 0) {
endDate = getAfterDate(endDate, 1);
}
}
return endDate;
}
/**
* 方法 getDate 得到Date型指定日期
*
* @param baseDate
* 时间字符串,如:2001-07-17 11:00:00
* @return Date 得到Date型指定日期
*/
public static Date getDate(String baseDate) {
if (baseDate == null || baseDate.length() == 0)
return null;
int year = Integer.parseInt(baseDate.substring(0, 4));
int month = Integer.parseInt(baseDate.substring(5, 7));
int date = Integer.parseInt(baseDate.substring(8, 10));
int hour = 0;
int minute = 0;
int second = 0;
if (baseDate.length() >= 13)
hour = Integer.parseInt(baseDate.substring(11, 13));
if (baseDate.length() >= 16)
minute = Integer.parseInt(baseDate.substring(14, 16));
if (baseDate.length() >= 19)
second = Integer.parseInt(baseDate.substring(17, 19));
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, date, hour, minute, second);
Date _date = calendar.getTime();
return _date;
}
/**
* 方法 getDate 得到Date型指定日期
*
* @param baseDate
* 时间字符串,如:20010717
* @return Date 得到Date型指定日期
*/
public static Date getDateSmall(String baseDate) {
if (baseDate == null || baseDate.length() == 0)
return null;
int year = Integer.parseInt(baseDate.substring(0, 4));
int month = Integer.parseInt(baseDate.substring(4, 6));
int date = Integer.parseInt(baseDate.substring(6));
int hour = 0;
int minute = 0;
int second = 0;
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, date, hour, minute, second);
Date _date = calendar.getTime();
return _date;
}
public static java.sql.Date getSqlDate(String baseDate) {
if (baseDate == null || baseDate.length() == 0)
return null;
Date date = getDate(baseDate);
return new java.sql.Date(date.getTime());
}
/**
* 方法 getDateString 得到指定样式的年月日
*
* @param year
* 年
* @param month
* 月
* @param date
* 日
* @param patternString
* 格式。如:yyyy-MM-dd HH:mm:ss EEE
* @return 格式化后的字符串
*/
public static String getDateString(int year, int month, int date,
String patternString) {
String dateString = "";
SimpleDateFormat formatter = new SimpleDateFormat(patternString);
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, date);
Date showDate = calendar.getTime();
dateString = formatter.format(showDate);
return dateString;
}
/**
* 方法 getDateString 得到指定样式的年月日, 对于非法数据返回当前日期样式
*
* @param year
* 年
* @param month
* 月
* @param date
* 日
* @param patternString
* 格式。如:yyyy-MM-dd HH:mm:ss EEE
* @return 格式化后的字符串
*/
public static String getDateString(String year, String month, String date,
String patternString) {
return getDateString(year, month, date, patternString, true);
}
public static String getDateString(String year, String month, String date,
String patternString, boolean hasDefault) {
String dateString = "";
SimpleDateFormat formatter = new SimpleDateFormat(patternString);
if (hasDefault)
dateString = formatter.format(new Date());
try {
int y = Integer.parseInt(year);
int m = Integer.parseInt(month);
int d = Integer.parseInt(date);
dateString = getDateString(y, m, d, patternString);
} catch (Exception e) {
}
return dateString;
}
public static String getDateString(String date, String patternString) {
if (date == null)
return "";
if (date.length() < 10)
return "";
SimpleDateFormat formatter = new SimpleDateFormat(patternString,
Locale.ENGLISH);
return formatter.format(getDate(date));
}
/**
* Convert a date object to String with specified format. See API document
* of java.text.SimpleDateFormat for detail description of format pattern.
* Return empty string if parameter date is null.
*
* @param _date
* @param patternString
* @return String
*/
public static String getDateString(Date _date, String patternString) {
String dateString = "";
if (_date != null) {
SimpleDateFormat formatter = new SimpleDateFormat(patternString);
dateString = formatter.format(_date);
}
return dateString;
}
public static String getBeforeMonth(int monthCount) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, monthCount);
Date _date = calendar.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
return formatter.format(_date);
}
public static String getHoursOfDay(String day) {
String st = "";
try {
st = Float.parseFloat(day) * 24 + "";
} catch (NumberFormatException ex) {
}
return st;
}
public static String getDayOfHours(String hours) {
String st = "";
try {
st = (Float.parseFloat(hours) / 24.0) + "";
} catch (NumberFormatException ex) {
}
return st;
}
/**
* 方法 getAfterDate 得到与指定日期相差指定天数的日期
*
* @param patternString
* 时间字符串,如:2001-07-17 11:00:00
* @param dayCount
* 向前或向后的天数,向后为正数,向前为负值
* @return String 处理后的日期字符串
*/
public static String getAfterToday(int dayCount, String patternString) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, dayCount);
Date _date = calendar.getTime();
SimpleDateFormat formatter = new SimpleDateFormat(patternString);
String dateString = formatter.format(_date);
return dateString;
}
/**
* 将string类型转换为date类型
*
* @param dateStr
* 2007-10-10
* @return
* @throws Exception
*/
public static Date getDateByString(String dateStr) {
try {
return getDate(dateStr, "yyyy-MM-dd");
} catch (Exception e) {
return null;
}
}
public static String getCurrentDate(String patten) {
SimpleDateFormat formatter = new SimpleDateFormat(patten);
String date = formatter.format(new Date(System.currentTimeMillis()));
return date;
}
public static String getDateStr(String patten) {
SimpleDateFormat formatter = new SimpleDateFormat(patten);
String date = "";
date = formatter.format(new Date(System.currentTimeMillis()));
return date;
}
/**
* 将字符日期型数据按照指定的格式解析成日期对象
*
* @param dateStr
* 2007-10-10 / 2007/10/10
* @param patten
* yyyy-MM-dd / yyyy/MM/dd
* @return
*/
public static Date getDate(String dateStr, String patten) {
SimpleDateFormat formatter = new SimpleDateFormat(patten);
try {
return formatter.parse(dateStr);
} catch (ParseException e) {
return null;
}
}
/**
* 获得格式化日期之后的 long数据值
*
* @param dateStr
* @param patten
* @return
* @throws Exception
*/
public static long getDateOfLong(String dateStr, String patten)
throws Exception {
return getDate(dateStr, patten).getTime();
}
/**
* 获得格式化日期之后的 String数据值
*
* @param dateLong
* @param patten
* @return
* @throws Exception
*/
public static String getDateOfString(Long dateLong, String patten)
throws Exception {
if (dateLong != null) {
return (new SimpleDateFormat(patten).format(new Date(dateLong
.longValue()))).toString();
}
return "";
}
/**
* 将string的日期类型转换为long类型
*
* @param dateStr
* 2007-10-10
* @return
* @throws Exception
*/
public static long getDateOfLong(String dateStr) throws Exception {
Date dt = getDateByString(dateStr);
return dt.getTime();
}
/**
* 获得long型当前日期
*
* @return
* @throws Exception
*/
public static long getCurrenTimeOfLong() {
Calendar calendar = Calendar.getInstance();
return calendar.getTime().getTime();
}
/**
* Convert java.util.Date object to java.sql.Date object.
*
* @param date
* @return Date
*/
public static java.sql.Date UtilDateToSQLDate(Date date) {
return new java.sql.Date(date.getTime());
}
/**
* 验证输入的文本信息日期是否合法
*
* @param inputDate
* @return
*/
public static Date isDate(String dateStr) {
String date_format_1 = "yyyy/MM/dd";
String date_format_2 = "yyyy-MM-dd";
String date_format_3 = "yyyyMMdd";
String date_format_4 = "yyyy.MM.dd";
String[] date_format = { date_format_1, date_format_2, date_format_3,
date_format_4 };
for (int i = 0; i < date_format.length; i++) {
try {
SimpleDateFormat formatDate = new SimpleDateFormat(
date_format[i]);
formatDate.setLenient(false);
ParsePosition pos = new java.text.ParsePosition(0);
Date tempDate = formatDate.parse(dateStr, pos);
tempDate.getTime();
return tempDate;
} catch (Exception e) {
}
}
return null;
}
/**
* <p>
* 返回calendar ,传入date
* </p>
*
* @author Jack Zhou
* @version $Id: DateUtil.java,v 0.1 Jul 2, 2008 12:36:59 PM Jack Exp $
*/
public static Calendar getCalendar(Date d) {
Calendar cal = Calendar.getInstance();
cal.setTime(d);
return cal;
}
/**
* <p>
* 返回时分秒的long类型
* </p>
*
* @author Jack Zhou
* @version $Id: DateUtil.java,v 0.1 Jul 2, 2008 12:36:39 PM Jack Exp $
*/
public static Long getHMSLong(Calendar c) {
int ap = c.get(Calendar.AM_PM);
int h = c.get(Calendar.HOUR);
if (ap == 1)
h = h + 12;
int m = c.get(Calendar.MINUTE);
int s = c.get(Calendar.SECOND);
return (long) (s + m * 60 + h * 60 * 60);
}
public static boolean compare(String hm) throws Exception {
Date dat = getDate(getDateString(new Date(), "yyyyMMdd") + " " + hm,
"yyyyMMdd HH:mm");
if (new Date().getTime() > dat.getTime()) {
return true;
} else {
return false;
}
}
public static Date getDateFromStr(String baseDate) {
if (baseDate == null || baseDate.length() == 0)
return null;
int year = Integer.parseInt(baseDate.substring(0, 4));
int month = Integer.parseInt(baseDate.substring(4, 6));
int date = Integer.parseInt(baseDate.substring(6, 8));
int hour = 0;
int minute = 0;
int second = 0;
if (baseDate.length() >= 10)
hour = Integer.parseInt(baseDate.substring(8, 10));
if (baseDate.length() >= 12)
minute = Integer.parseInt(baseDate.substring(10, 12));
if (baseDate.length() >= 14)
second = Integer.parseInt(baseDate.substring(12, 14));
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, date, hour, minute, second);
Date _date = calendar.getTime();
return _date;
}
public static void main(String[] args) throws Exception {
Date date = DateUtil.getDateFromStr("20090304005743");
System.out.println(DateUtil.getDateString(date,
DateUtil.FILE_INDENTIFY_FORMAT));
}
}
分享到:
相关推荐
在Java编程语言中,日期处理是一项常见的任务,用于管理和操作日期和时间。为了方便开发者,Java提供了多种工具类来处理日期。"日期处理工具类"通常是指一个自定义的类,它封装了一些常用的方法,例如日期格式化、...
在C语言中,日期处理是一项基础但重要的任务,它涉及到时间戳、日期格式化、日期比较和日期计算等。C语言本身并没有内置的日期库,但通过标准库中的`<time.h>`头文件,我们可以利用系统时间来实现日期的相关操作。...
在C++编程中,日期处理是一项常见的任务,尤其是在开发涉及日历、时间追踪或数据分析的应用程序时。C++标准库并没有内置一个强大的日期处理类,但可以通过自定义类或者使用第三方库来实现这一功能。本篇文章将深入...
本文将深入探讨C#中的日期处理函数,特别是`DateTime`类的使用方法。 1. `DateTime` 类型是C#中用于表示日期和时间的内置类型。通过以下方式可以创建一个表示当前时间的`DateTime`对象: ```csharp System....
Date4j是一个轻量级的日期处理类库,它的出现为Java开发者提供了一种更为简单易用的方式来处理日期和时间。这个库的目标是简化日期计算,避免使用Java标准库中的`java.util.Date`和`java.util.Calendar`这些复杂的...
以下是一些关键的Oracle日期处理函数和SQL语句的详细说明: 1. **TO_DATE函数**:用于将字符串转换为日期。例如,`TO_DATE('2022-04-05', 'YYYY-MM-DD')`将字符串'2022-04-05'转换为日期。日期格式必须与提供的模式...
在C++编程中,日期处理是一项常见的任务,特别是在开发涉及时间序列分析、日志记录或者时间敏感的应用程序时。为了方便地操作日期,我们可以自定义一个日期处理类,如标题所示的"日期处理类"。这个类通常会包含一...
java中关于日期处理的总结,包含各种日期格式之间的转java.util.Date(已经不提倡使用,该类的方法比较少) java.util.Calendar(抽象类) java.util.GregorianCalendar(是Calendar的子类,日期处理时候经常使用该类)****...
Oracle数据库在日期处理方面提供了丰富的函数和操作方式,使得对日期和时间的管理变得非常灵活。以下是对标题和描述中提到的知识点的详细说明: 1. **日期和字符转换**: - `to_date` 函数用于将字符型数据转换为...
Oracle数据库在日期处理方面提供了丰富的函数,使得对日期和时间的操作变得非常灵活。以下是对给定文件中提及的Oracle日期处理函数的详细说明: 1. **add_months(d, n)**: 此函数将日期d加上n个月,返回新的日期。...
在Java编程中,日期处理是一项常见的任务,涉及到各种日期和时间的操作。以下是一些关于Java日期处理的关键知识点,这些知识点在给定的文件中有所提及: 1. **获取当前日期**: Java通过`java.util.Date`类可以...
本文将详细介绍SQL中日期处理的常用方法,包括获取当前系统时间、日期加减运算、计算日期差、提取日期部分、转换日期格式等功能。 ### 一、获取当前系统时间 在SQL Server中,`GETDATE()`函数用于返回当前的系统...
在SQL Server中,日期处理是数据管理的核心部分,涉及到各种日期和时间的计算、比较以及格式化。本章主要探讨SQL Server中两种主要的日期类型:datetime和smalldatetime。 1. **日期类型概述** - **datetime**: ...
基本涵盖了各种场景的日期处理需要,包括时间类型转换,获取N天前后,月初月末,某段时间按天拆分等功能,欢迎使用。
根据给定的文件标题、描述、标签以及部分内容,我们可以总结出以下有关 Java 日期处理的知识点: ### 1. 导入必要的包 在 Java 中处理日期时,我们需要导入一些必要的包来支持日期时间的格式化、解析等功能。示例...
在Oracle数据库中,日期处理是一项基础且重要的任务,它涉及到数据的存储、查询以及分析。Oracle提供了丰富的函数和操作符来处理日期,使得我们可以轻松地完成诸如计算星期几、两个日期之间的天数等常见需求。以下是...
`DateUtil`类通常被设计为一个工具类,用于提供方便、高效和灵活的日期处理功能。这个类集成了多种方法,帮助开发者进行日期格式化、获取当前时间等操作。下面我们将深入探讨`DateUtil`类可能包含的一些核心知识点。...