- 浏览: 135151 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (84)
- Java (30)
- C/C++ (3)
- Linux (1)
- 数据库 (19)
- 搜索引擎 (1)
- 数据结构 (2)
- 杂七杂八 (4)
- WEB前端 (6)
- Spring (2)
- JavaScript (9)
- DHTMLX (3)
- 正则表达式 (1)
- JQuery (1)
- Report (2)
- PDF (2)
- Word (0)
- Excel (0)
- CSV (0)
- Test & QA (1)
- BI (Business Intelligence) (10)
- SQL (18)
- SAP Business Object (0)
- DataStage (3)
- CI (Continuous Integration) (1)
- Algorith (3)
- Portal (1)
- Struts (1)
- Oracle (9)
- MS SQL Server (3)
- Teradata (3)
- MySql (1)
- Data Warehouse (5)
- ETL (8)
public class DateUtil
{
//默认显示日期的格式
public static final String DATAFORMAT_STR = "yyyy-MM-dd";
//默认显示日期的格式
public static final String YYYY_MM_DATAFORMAT_STR = "yyyy-MM";
//默认显示日期时间的格式
public static final String DATATIMEF_STR = "yyyy-MM-dd HH:mm:ss";
//默认显示简体中文日期的格式
public static final String ZHCN_DATAFORMAT_STR = "yyyy年MM月dd日";
//默认显示简体中文日期时间的格式
public static final String ZHCN_DATATIMEF_STR = "yyyy年MM月dd日HH时mm分ss秒";
//默认显示简体中文日期时间的格式
public static final String ZHCN_DATATIMEF_STR_4yMMddHHmm = "yyyy年MM月dd日HH时mm分";
private static DateFormat dateFormat = null;
private static DateFormat dateTimeFormat = null;
private static DateFormat zhcnDateFormat = null;
private static DateFormat zhcnDateTimeFormat = null;
static
{
dateFormat = new SimpleDateFormat(DATAFORMAT_STR);
dateTimeFormat = new SimpleDateFormat(DATATIMEF_STR);
zhcnDateFormat = new SimpleDateFormat(ZHCN_DATAFORMAT_STR);
zhcnDateTimeFormat = new SimpleDateFormat(ZHCN_DATATIMEF_STR);
}
private static DateFormat getDateFormat(String formatStr)
{
if (formatStr.equalsIgnoreCase(DATAFORMAT_STR))
{
return dateFormat;
}
else
if (formatStr.equalsIgnoreCase(DATATIMEF_STR))
{
return dateTimeFormat;
}
else
if (formatStr.equalsIgnoreCase(ZHCN_DATAFORMAT_STR))
{
return zhcnDateFormat;
}
else
if (formatStr.equalsIgnoreCase(ZHCN_DATATIMEF_STR))
{
return zhcnDateTimeFormat;
}
else
{
return new SimpleDateFormat(formatStr);
}
}
/**
* 按照默认显示日期时间的格式"yyyy-MM-dd HH:mm:ss",转化dateTimeStr为Date类型
* dateTimeStr必须是"yyyy-MM-dd HH:mm:ss"的形式
* @param dateTimeStr
* @return
*/
public static Date getDate(String dateTimeStr)
{
return getDate(dateTimeStr, DATATIMEF_STR);
}
/**
* 按照默认formatStr的格式,转化dateTimeStr为Date类型
* dateTimeStr必须是formatStr的形式
* @param dateTimeStr
* @param formatStr
* @return
*/
public static Date getDate(String dateTimeStr, String formatStr)
{
try
{
if (dateTimeStr == null || dateTimeStr.equals(""))
{
return null;
}
DateFormat sdf = getDateFormat(formatStr);
java.util.Date d = sdf.parse(dateTimeStr);
return d;
}
catch (ParseException e)
{
throw new RuntimeException(e);
}
}
/**
* 将YYYYMMDD转换成Date日期
* @param date
* @return
* @throws BusinessException
*/
public static Date transferDate(String date) throws Exception
{
if (date == null || date.length() < 1)
return null;
if (date.length() != 8)
throw new Exception("日期格式错误");
String con = "-";
String yyyy = date.substring(0, 4);
String mm = date.substring(4, 6);
String dd = date.substring(6, 8);
int month = Integer.parseInt(mm);
int day = Integer.parseInt(dd);
if (month < 1 || month > 12 || day < 1 || day > 31)
throw new Exception("日期格式错误");
String str = yyyy + con + mm + con + dd;
return DateUtil.getDate(str, DateUtil.DATAFORMAT_STR);
}
/**
* 将YYYY-MM-DD日期转换成yyyymmdd格式字符串
* @param date
* @return
*/
public static String getYYYYMMDDDate(Date date)
{
if (date == null)
return null;
String yyyy = getYear(date) + "";
String mm = getMonth(date) + "";
String dd = getDay(date) + "";
mm = StringUtil.rightAlign(mm, 2, "0");
dd = StringUtil.rightAlign(dd, 2, "0");
return yyyy + mm + dd;
}
/**
* 将YYYY-MM-DD日期转换成YYYYMMDDHHMMSS格式字符串
* @param date
* @return
*/
public static String getYYYYMMDDHHMMSSDate(Date date)
{
if (date == null)
return null;
String yyyy = getYear(date) + "";
String mm = getMonth(date) + "";
String dd = getDay(date) + "";
String hh = getHour(date) + "";
String min = getMin(date) + "";
String ss = getSecond(date) + "";
mm = StringUtil.rightAlign(mm, 2, "0");
dd = StringUtil.rightAlign(dd, 2, "0");
hh = StringUtil.rightAlign(hh, 2, "0");
min = StringUtil.rightAlign(min, 2, "0");
ss = StringUtil.rightAlign(ss, 2, "0");
return yyyy + mm + dd + hh + min + ss;
}
/**
* 将YYYY-MM-DD日期转换成yyyymmdd格式字符串
* @param date
* @return
*/
public static String getYYYYMMDDDate(String date)
{
return getYYYYMMDDDate(getDate(date, DATAFORMAT_STR));
}
/**
* 将Date转换成字符串“yyyy-mm-dd hh:mm:ss”的字符串
* @param date
* @return
*/
public static String dateToDateString(Date date)
{
return dateToDateString(date, DATATIMEF_STR);
}
/**
* 将Date转换成formatStr格式的字符串
* @param date
* @param formatStr
* @return
*/
public static String dateToDateString(Date date, String formatStr)
{
DateFormat df = getDateFormat(formatStr);
return df.format(date);
}
/**
* 返回一个yyyy-MM-dd HH:mm:ss 形式的日期时间字符串中的HH:mm:ss
* @param dateTime
* @return
*/
public static String getTimeString(String dateTime)
{
return getTimeString(dateTime, DATATIMEF_STR);
}
/**
* 返回一个formatStr格式的日期时间字符串中的HH:mm:ss
* @param dateTime
* @param formatStr
* @return
*/
public static String getTimeString(String dateTime, String formatStr)
{
Date d = getDate(dateTime, formatStr);
String s = dateToDateString(d);
return s.substring(DATATIMEF_STR.indexOf('H'));
}
/**
* 获取当前日期yyyy-MM-dd的形式
* @return
*/
public static String getCurDate()
{
//return dateToDateString(new Date(),DATAFORMAT_STR);
return dateToDateString(Calendar.getInstance().getTime(), DATAFORMAT_STR);
}
/**
* 获取当前日期yyyy年MM月dd日的形式
* @return
*/
public static String getCurZhCNDate()
{
return dateToDateString(new Date(), ZHCN_DATAFORMAT_STR);
}
/**
* 获取当前日期时间yyyy-MM-dd HH:mm:ss的形式
* @return
*/
public static String getCurDateTime()
{
return dateToDateString(new Date(), DATATIMEF_STR);
}
/**
* 获取当前日期时间yyyy年MM月dd日HH时mm分ss秒的形式
* @return
*/
public static String getCurZhCNDateTime()
{
return dateToDateString(new Date(), ZHCN_DATATIMEF_STR);
}
/**
* 获取日期d的days天后的一个Date
* @param d
* @param days
* @return
*/
public static Date getInternalDateByDay(Date d, int days)
{
Calendar now = Calendar.getInstance(TimeZone.getDefault());
now.setTime(d);
now.add(Calendar.DATE, days);
return now.getTime();
}
public static Date getInternalDateByMon(Date d, int months)
{
Calendar now = Calendar.getInstance(TimeZone.getDefault());
now.setTime(d);
now.add(Calendar.MONTH, months);
return now.getTime();
}
public static Date getInternalDateByYear(Date d, int years)
{
Calendar now = Calendar.getInstance(TimeZone.getDefault());
now.setTime(d);
now.add(Calendar.YEAR, years);
return now.getTime();
}
public static Date getInternalDateBySec(Date d, int sec)
{
Calendar now = Calendar.getInstance(TimeZone.getDefault());
now.setTime(d);
now.add(Calendar.SECOND, sec);
return now.getTime();
}
public static Date getInternalDateByMin(Date d, int min)
{
Calendar now = Calendar.getInstance(TimeZone.getDefault());
now.setTime(d);
now.add(Calendar.MINUTE, min);
return now.getTime();
}
public static Date getInternalDateByHour(Date d, int hours)
{
Calendar now = Calendar.getInstance(TimeZone.getDefault());
now.setTime(d);
now.add(Calendar.HOUR_OF_DAY, hours);
return now.getTime();
}
/**
* 根据一个日期字符串,返回日期格式,目前支持4种
* 如果都不是,则返回null
* @param DateString
* @return
*/
public static String getFormateStr(String DateString)
{
String patternStr1 = "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"; //"yyyy-MM-dd"
String patternStr2 = "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}\\s[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}"; //"yyyy-MM-dd HH:mm:ss";
String patternStr3 = "[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日";//"yyyy年MM月dd日"
String patternStr4 = "[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日[0-9]{1,2}时[0-9]{1,2}分[0-9]{1,2}秒";//"yyyy年MM月dd日HH时mm分ss秒"
Pattern p = Pattern.compile(patternStr1);
Matcher m = p.matcher(DateString);
boolean b = m.matches();
if (b)
return DATAFORMAT_STR;
p = Pattern.compile(patternStr2);
m = p.matcher(DateString);
b = m.matches();
if (b)
return DATATIMEF_STR;
p = Pattern.compile(patternStr3);
m = p.matcher(DateString);
b = m.matches();
if (b)
return ZHCN_DATAFORMAT_STR;
p = Pattern.compile(patternStr4);
m = p.matcher(DateString);
b = m.matches();
if (b)
return ZHCN_DATATIMEF_STR;
return null;
}
/**
* 将一个"yyyy-MM-dd HH:mm:ss"字符串,转换成"yyyy年MM月dd日HH时mm分ss秒"的字符串
* @param dateStr
* @return
*/
public static String getZhCNDateTime(String dateStr)
{
Date d = getDate(dateStr);
return dateToDateString(d, ZHCN_DATATIMEF_STR);
}
/**
* 将一个"yyyy-MM-dd"字符串,转换成"yyyy年MM月dd日"的字符串
* @param dateStr
* @return
*/
public static String getZhCNDate(String dateStr)
{
Date d = getDate(dateStr, DATAFORMAT_STR);
return dateToDateString(d, ZHCN_DATAFORMAT_STR);
}
/**
* 将dateStr从fmtFrom转换到fmtTo的格式
* @param dateStr
* @param fmtFrom
* @param fmtTo
* @return
*/
public static String getDateStr(String dateStr, String fmtFrom, String fmtTo)
{
Date d = getDate(dateStr, fmtFrom);
return dateToDateString(d, fmtTo);
}
/**
* 比较两个"yyyy-MM-dd HH:mm:ss"格式的日期,之间相差多少毫秒,time2-time1
* @param time1
* @param time2
* @return
*/
public static long compareDateStr(String time1, String time2)
{
Date d1 = getDate(time1);
Date d2 = getDate(time2);
return d2.getTime() - d1.getTime();
}
/**
* 将小时数换算成返回以毫秒为单位的时间
* @param hours
* @return
*/
public static long getMicroSec(BigDecimal hours)
{
BigDecimal bd;
bd = hours.multiply(new BigDecimal(3600 * 1000));
return bd.longValue();
}
/**
* 获取Date中的分钟
* @param d
* @return
*/
public static int getMin(Date d)
{
Calendar now = Calendar.getInstance(TimeZone.getDefault());
now.setTime(d);
return now.get(Calendar.MINUTE);
}
/**
* 获取Date中的小时(24小时)
* @param d
* @return
*/
public static int getHour(Date d)
{
Calendar now = Calendar.getInstance(TimeZone.getDefault());
now.setTime(d);
return now.get(Calendar.HOUR_OF_DAY);
}
/**
* 获取Date中的秒
* @param d
* @return
*/
public static int getSecond(Date d)
{
Calendar now = Calendar.getInstance(TimeZone.getDefault());
now.setTime(d);
return now.get(Calendar.SECOND);
}
/**
* 获取xxxx-xx-xx的日
* @param d
* @return
*/
public static int getDay(Date d)
{
Calendar now = Calendar.getInstance(TimeZone.getDefault());
now.setTime(d);
return now.get(Calendar.DAY_OF_MONTH);
}
/**
* 获取月份,1-12月
* @param d
* @return
*/
public static int getMonth(Date d)
{
Calendar now = Calendar.getInstance(TimeZone.getDefault());
now.setTime(d);
return now.get(Calendar.MONTH) + 1;
}
/**
* 获取19xx,20xx形式的年
* @param d
* @return
*/
public static int getYear(Date d)
{
Calendar now = Calendar.getInstance(TimeZone.getDefault());
now.setTime(d);
return now.get(Calendar.YEAR);
}
/**
* 得到d的上个月的年份+月份,如200505
* @return
*/
public static String getYearMonthOfLastMon(Date d)
{
Date newdate = getInternalDateByMon(d, -1);
String year = String.valueOf(getYear(newdate));
String month = String.valueOf(getMonth(newdate));
return year + month;
}
/**
* 得到当前日期的年和月如200509
* @return String
*/
public static String getCurYearMonth()
{
Calendar now = Calendar.getInstance(TimeZone.getDefault());
String DATE_FORMAT = "yyyyMM";
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
sdf.setTimeZone(TimeZone.getDefault());
return (sdf.format(now.getTime()));
}
public static Date getNextMonth(String year, String month)
{
String datestr = year + "-" + month + "-01";
Date date = getDate(datestr, DATAFORMAT_STR);
return getInternalDateByMon(date, 1);
}
public static Date getLastMonth(String year, String month)
{
String datestr = year + "-" + month + "-01";
Date date = getDate(datestr, DATAFORMAT_STR);
return getInternalDateByMon(date, -1);
}
/**
* 得到日期d,按照页面日期控件格式,如"2001-3-16"
* @param d
* @return
*/
public static String getSingleNumDate(Date d)
{
return dateToDateString(d, DATAFORMAT_STR);
}
/**
* 得到d半年前的日期,"yyyy-MM-dd"
* @param d
* @return
*/
public static String getHalfYearBeforeStr(Date d)
{
return dateToDateString(getInternalDateByMon(d, -6), DATAFORMAT_STR);
}
/**
* 得到当前日期D的月底的前/后若干天的时间,<0表示之前,>0表示之后
* @param d
* @param days
* @return
*/
public static String getInternalDateByLastDay(Date d, int days)
{
return dateToDateString(getInternalDateByDay(d, days), DATAFORMAT_STR);
}
/**
* 日期中的年月日相加
* @param field int 需要加的字段 年 月 日
* @param amount int 加多少
* @return String
*/
public static String addDate(int field, int amount)
{
int temp = 0;
if (field == 1)
{
temp = Calendar.YEAR;
}
if (field == 2)
{
temp = Calendar.MONTH;
}
if (field == 3)
{
temp = Calendar.DATE;
}
String Time = "";
try
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance(TimeZone.getDefault());
cal.add(temp, amount);
Time = sdf.format(cal.getTime());
return Time;
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
/**
* 获得系统当前月份的天数
* @return
*/
public static int getCurentMonthDay()
{
Date date = Calendar.getInstance().getTime();
return getMonthDay(date);
}
/**
* 获得指定日期月份的天数
* @return
*/
public static int getMonthDay(Date date)
{
Calendar c = Calendar.getInstance();
c.setTime(date);
return c.getActualMaximum(Calendar.DAY_OF_MONTH);
}
/**
* 获得指定日期月份的天数 yyyy-mm-dd
* @return
*/
public static int getMonthDay(String date)
{
Date strDate = getDate(date, DATAFORMAT_STR);
return getMonthDay(strDate);
}
public static String getStringDate(Calendar cal)
{
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
return format.format(cal.getTime());
}
/**
* @param args
*/
public static void main(String[] args)
{
// //System.out.print(DateUtil.getDate("04:04:04","HH:mm:ss"));
// System.out.print("\n"+DateUtil.getCurZhCNDateTime());
// System.out.print("\n"+getFormateStr(DateUtil.getCurDate()));
// System.out.print("\n"+compareDateStr("1900-1-1 1:1:2","1900-1-1 1:1:3"));
// System.out.print("\n"+getDay(new Date()));
// System.out.print("\n"+getMonth(new Date()));
// System.out.print("\n"+getYear(new Date()));
// System.out.print("\n"+getMin(new Date()));
//// System.out.print("\n"+new Date().getSeconds());
/*Date d1 = new Date(2007,11,30);
Date d2 = new Date(2007,12,1);
if(d2.compareTo(d1)>0){
System.out.println("d2大于d1");
}else{
System.out.println("d2小于d1");
}*/
System.out.println(addDate(1, 1));
System.out.println(addDate(2, 1));
System.out.println(addDate(3, 1));
System.out.println(getYYYYMMDDHHMMSSDate(new Date()));
System.out.println(getCurentMonthDay());
}
}
发表评论
-
优秀程序员不得不知道的20个位运算技巧 【转】
2012-12-14 11:19 1499【转载】一提起位运算,人们往往想到它的高效性,无论是嵌入式编程 ... -
java导出csv用excel打开后数字不用科学计数法显示
2011-08-15 14:27 22154最近写了一个生成csv的程序,生成的csv其中有一列数字长度 ... -
java生成xml文件的时候如何控制xml的缩进格式
2011-07-26 16:22 1137使用java自带的xml api生 ... -
java读取配置文件的几种方法
2011-07-21 12:17 748java读取配置文件的几种方法 在现实工 ... -
正则表达式语法
2011-07-18 10:52 726一个正则表达式就是 ... -
CSDN上看到的一篇有关Spring JDBC事务管理的文章(内容比较全)
2011-07-08 16:18 1100JDBC事务管理 Spring提供编程式的事务管理(Progr ... -
Spring:JdbcTemplate使用指南
2011-07-07 21:35 1027前言: 本文指在介绍 Spring 框架 ... -
java中取小数点后两位(四种方法)
2011-07-01 16:33 1811一 Long是长整型,怎么有小数,是double吧 ... -
Java正则表达式(一)
2011-06-30 20:14 867正则表达式在处理文本方面用处非常大,最早像在Perl和awk语 ... -
Java正则表达式(二)
2011-06-30 20:13 1006Matcher类: 使用Matcher类,最重要的一个概念必须 ... -
DBUnit入门
2011-04-28 15:55 795相信做过单元测试的人都会对JUnit非常的熟悉了,今天要介绍的 ... -
一些经典算法题目
2011-02-03 21:28 8941.写一个方法,用一个fo ... -
求最大子序列和问题的最优算法
2010-12-17 19:42 885//求最大子序列和问题, public class ... -
Java UDP通信(DatagramPacket类、DatagramSocket类、InetAddress类)
2010-11-30 22:16 1489一、DatagramPacket类: 如果把Datagram ... -
Java向服务器发送POST请求
2010-10-30 19:06 2438public String sendToServer(Stri ... -
Java发送Http请求,解析html返回
2010-10-30 18:53 2060首先,向一个Web站点发送POST请求只需要简单的几步: 注 ... -
Struts1和Struts2的区别和对比
2010-10-30 13:23 8731.Action 类: • Struts1要求Action类 ... -
java.net.URL的URL构建方式
2010-10-30 13:21 879Tag:java.net.URL URL构建方式 ... -
Vector遍历的通用实现
2010-10-27 19:53 1597对于Vector,如果我们不用遍历,那么就要自己去写循环,也是 ... -
Http和Socket连接区别
2010-10-27 11:58 812Http和Socket连接区别 1、 ...
相关推荐
date工具类
最近由于项目需要写了一些关于操作Date的代码,建议把经常需要的工具类保存下来,以备不时之需
在Java编程中,Date类是处理日期和时间的基础类,但在实际开发中,由于Date类本身的API设计并不十分友好,通常我们会使用工具类来简化日期的处理工作。本主题聚焦于一个名为"Date日期操作工具类"的实用工具,它提供...
这是本人自己整理的java中的Date工具类,包含了常用的时间格式化方法和转换方法;在工作中使用起来还是蛮方便的;希望对大家有帮助!
java Date操作工具类,对日期的各种基本的操作
Java工具类集合是Java开发中不可或缺的一部分,它们提供了一系列便捷的方法,帮助开发者高效地处理各种常见任务。在Java中,工具类通常被组织在各种包下,如`java.util`、`java.lang`、`java.io`等。下面将详细介绍...
"Java常用工具类大全,工作5年精心整理.zip"这个压缩包文件很可能包含了一位有经验的Java开发者在五年工作中积累的各种实用工具类,这些工具类能够极大地提高开发效率,简化代码编写。以下是对可能包含的知识点进行...
在这个名为"牛逼的java常用工具类"的压缩包中,我们可以期待找到一些由经验丰富的开发者精心设计和优化的工具类,这些工具类能极大地提高开发效率,减少代码量,使程序更加健壮。下面,我们将详细探讨一些可能包含在...
Java常用工具类是Java开发中不可或缺的一部分,它们提供了一系列便捷的方法,帮助开发者高效地处理各种常见任务。在Java中,最著名的工具类库是`java.util`包,它包含了大量实用类,如集合、日期时间、数学计算、...
在Java编程中,工具类(Util Classes)是包含各种实用方法的类,它们不持有状态,主要用于提供方便的静态方法。这些工具类极大地提升了代码的可读性和复用性。以下将详细介绍标题和描述中提到的一些关键工具类及其...
Java工具类是Java编程中非常重要的组成部分,它们提供了一系列预定义的方法,可以帮助开发者高效地处理各种常见任务,而无需从头实现。在Java中,最知名的工具类库是`java.util`包,它包含了大量方便实用的类。下面...
**java.util**: 这是最核心的工具包之一,包含了集合框架(如ArrayList、LinkedList、HashSet、HashMap等)、日期时间API(如Date、Calendar、LocalDate等)、事件模型、线程管理、随机数生成器以及多种实用工具类...
在Java编程语言中,工具类集合是一系列实用的类,它们提供了各种通用功能,帮助开发者更高效地编写代码。这些工具类通常包含在Java的`java.util`以及其他相关的包中,如`java.text`,`javax.imageio`,`javax.xml`等...
本篇将围绕Java中的日期工具类和时间工具类展开讨论,同时会涉及到日期时间的格式化。 首先,Java 8之前,我们主要依赖`java.util.Date`和`java.text.SimpleDateFormat`这两个类来处理日期和时间。`Date`类用于表示...
总的来说,`java.util.Date` 类在获取和表示当前系统时间上是一个基础且实用的工具,虽然在新的Java版本中有了更好的替代品,但理解其工作原理对于理解Java的日期和时间处理至关重要。在实际编程中,根据项目需求和...
Java工具类是Java编程中非常重要的组成部分,它们提供了一系列便捷的方法,可以极大地提高开发效率,减少重复代码。这里我们主要探讨的是一个集合了多种常见功能的Java工具类库。 首先,我们要理解Java工具类(Java...
在Java编程中,工具类(Utility Class)是包含静态方法的类,这些方法通常执行某种通用操作或提供一些辅助功能。这些工具类可以极大地提高代码的可读性和可重用性,减少代码冗余,使得开发者能更专注于业务逻辑。在...