import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class DateUtil {
protected static Log logger = LogFactory.getLog(DateUtil.class);
// 格式:年-月-日 小时:分钟:秒
public static final String FORMAT_ONE = "yyyy-MM-dd HH:mm:ss";
// 格式:年-月-日 小时:分钟
public static final String FORMAT_TWO = "yyyy-MM-dd HH:mm";
// 格式:年月日 小时分钟秒
public static final String FORMAT_THREE = "yyyyMMdd-HHmmss";
// 格式:年-月-日
public static final String LONG_DATE_FORMAT = "yyyy-MM-dd";
// 格式:月-日
public static final String SHORT_DATE_FORMAT = "MM-dd";
// 格式:小时:分钟:秒
public static final String LONG_TIME_FORMAT = "HH:mm:ss";
//格式:年-月
public static final String MONTG_DATE_FORMAT = "yyyy-MM";
// 年的加减
public static final int SUB_YEAR = Calendar.YEAR;
// 月加减
public static final int SUB_MONTH = Calendar.MONTH;
// 天的加减
public static final int SUB_DAY = Calendar.DATE;
// 小时的加减
public static final int SUB_HOUR = Calendar.HOUR;
// 分钟的加减
public static final int SUB_MINUTE = Calendar.MINUTE;
// 秒的加减
public static final int SUB_SECOND = Calendar.SECOND;
static final String dayNames[] = { "星期日", "星期一", "星期二", "星期三", "星期四",
"星期五", "星期六" };
@SuppressWarnings("unused")
private static final SimpleDateFormat timeFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
public DateUtil() {
}
/**
* 把符合日期格式的字符串转换为日期类型
*/
public static java.util.Date stringtoDate(String dateStr, String format) {
Date d = null;
SimpleDateFormat formater = new SimpleDateFormat(format);
try {
formater.setLenient(false);
d = formater.parse(dateStr);
} catch (Exception e) {
// log.error(e);
d = null;
}
return d;
}
/**
* 把符合日期格式的字符串转换为日期类型
*/
public static java.util.Date stringtoDate(String dateStr, String format,
ParsePosition pos) {
Date d = null;
SimpleDateFormat formater = new SimpleDateFormat(format);
try {
formater.setLenient(false);
d = formater.parse(dateStr, pos);
} catch (Exception e) {
d = null;
}
return d;
}
/**
* 把日期转换为字符串
*/
public static String dateToString(java.util.Date date, String format) {
String result = "";
SimpleDateFormat formater = new SimpleDateFormat(format);
try {
result = formater.format(date);
} catch (Exception e) {
// log.error(e);
}
return result;
}
/**
* 获取当前时间的指定格式
*/
public static String getCurrDate(String format) {
return dateToString(new Date(), format);
}
public static String dateSub(int dateKind, String dateStr, int amount) {
Date date = stringtoDate(dateStr, FORMAT_ONE);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(dateKind, amount);
return dateToString(calendar.getTime(), FORMAT_ONE);
}
/**
* 两个日期相减
* @return 相减得到的秒数
*/
public static long timeSub(String firstTime, String secTime) {
long first = stringtoDate(firstTime, FORMAT_ONE).getTime();
long second = stringtoDate(secTime, FORMAT_ONE).getTime();
return (second - first) / 1000;
}
/**
* 获得某月的天数
*/
public static int getDaysOfMonth(String year, String month) {
int days = 0;
if (month.equals("1") || month.equals("3") || month.equals("5")
|| month.equals("7") || month.equals("8") || month.equals("10")
|| month.equals("12")) {
days = 31;
} else if (month.equals("4") || month.equals("6") || month.equals("9")
|| month.equals("11")) {
days = 30;
} else {
if ((Integer.parseInt(year) % 4 == 0 && Integer.parseInt(year) % 100 != 0)
|| Integer.parseInt(year) % 400 == 0) {
days = 29;
} else {
days = 28;
}
}
return days;
}
/**
* 获取某年某月的天数
*/
public static int getDaysOfMonth(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
/**
* 获得当前日期
*/
public static int getToday() {
Calendar calendar = Calendar.getInstance();
return calendar.get(Calendar.DATE);
}
/**
* 获得当前月份
*/
public static int getToMonth() {
Calendar calendar = Calendar.getInstance();
return calendar.get(Calendar.MONTH) + 1;
}
/**
* 获得当前年份
*/
public static int getToYear() {
Calendar calendar = Calendar.getInstance();
return calendar.get(Calendar.YEAR);
}
/**
* 返回日期的天
*/
public static int getDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DATE);
}
/**
* 返回日期的年
*/
public static int getYear(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.YEAR);
}
/**
* 返回日期的月份,1-12
*/
public static int getMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.MONTH) + 1;
}
/**
* 计算两个日期相差的天数,如果date2 > date1 返回正数,否则返回负数
*/
public static long dayDiff(Date date1, Date date2) {
return (date2.getTime() - date1.getTime()) / 86400000;
}
/**
* 比较两个日期的年差
*/
public static int yearDiff(String before, String after) {
Date beforeDay = stringtoDate(before, LONG_DATE_FORMAT);
Date afterDay = stringtoDate(after, LONG_DATE_FORMAT);
return getYear(afterDay) - getYear(beforeDay);
}
/**
* 比较指定日期与当前日期的差
*/
public static int yearDiffCurr(String after) {
Date beforeDay = new Date();
Date afterDay = stringtoDate(after, LONG_DATE_FORMAT);
return getYear(beforeDay) - getYear(afterDay);
}
/**
* 比较指定日期与当前日期的差
*/
public static long dayDiffCurr(String before) {
Date currDate = DateUtil.stringtoDate(currDay(), LONG_DATE_FORMAT);
Date beforeDate = stringtoDate(before, LONG_DATE_FORMAT);
return (currDate.getTime() - beforeDate.getTime()) / 86400000;
}
/**
* 获取每月的第一周
*/
public static int getFirstWeekdayOfMonth(int year, int month) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.SATURDAY); // 星期天为第一天
c.set(year, month - 1, 1);
return c.get(Calendar.DAY_OF_WEEK);
}
/**
* 获取每月的最后一周
*/
public static int getLastWeekdayOfMonth(int year, int month) {
Calendar c = Calendar.getInstance();
c.setFirstDayOfWeek(Calendar.SATURDAY); // 星期天为第一天
c.set(year, month - 1, getDaysOfMonth(year, month));
return c.get(Calendar.DAY_OF_WEEK);
}
/**
* 获得当前日期字符串,格式"yyyy_MM_dd_HH_mm_ss"
*
* @return
*/
public static String getCurrent() {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
StringBuffer sb = new StringBuffer();
sb.append(year).append("_").append(StringUtil.addzero(month, 2))
.append("_").append(StringUtil.addzero(day, 2)).append("_")
.append(StringUtil.addzero(hour, 2)).append("_").append(
StringUtil.addzero(minute, 2)).append("_").append(
StringUtil.addzero(second, 2));
return sb.toString();
}
/**
* 获得当前日期字符串,格式"yyyy-MM-dd HH:mm:ss"
*
* @return
*/
public static String getNow() {
Calendar today = Calendar.getInstance();
return dateToString(today.getTime(), FORMAT_ONE);
}
/**
* 判断日期是否有效,包括闰年的情况
*
* @param date
* YYYY-mm-dd
* @return
*/
public static boolean isDate(String date) {
StringBuffer reg = new StringBuffer(
"^((\\d{2}(([02468][048])|([13579][26]))-?((((0?");
reg.append("[13578])|(1[02]))-?((0?[1-9])|([1-2][0-9])|(3[01])))");
reg.append("|(((0?[469])|(11))-?((0?[1-9])|([1-2][0-9])|(30)))|");
reg.append("(0?2-?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][12");
reg.append("35679])|([13579][01345789]))-?((((0?[13578])|(1[02]))");
reg.append("-?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))");
reg.append("-?((0?[1-9])|([1-2][0-9])|(30)))|(0?2-?((0?[");
reg.append("1-9])|(1[0-9])|(2[0-8]))))))");
Pattern p = Pattern.compile(reg.toString());
return p.matcher(date).matches();
}
相关推荐
### Java日期处理大全:掌握时间的艺术 在Java编程中,日期和时间的处理是不可或缺的一部分,尤其是在涉及到数据记录、时间戳、定时任务等场景时。本文将深入探讨Java中的日期处理技术,涵盖从基础到进阶的各种技巧...
总的来说,Java在文本处理方面提供了全面且强大的支持,无论是简单的文件读写,还是复杂的文本分析和处理,都可以找到相应的解决方案。通过熟练掌握这些工具和技巧,开发者可以有效地处理各种文本任务。
总的来说,DateUtil.java工具类简化了Java中日期和时间的操作,使开发者可以更专注于业务逻辑而不是底层的日期处理。尽管Java 8引入的新时间API提供了更好的抽象和更直观的API,但旧的`java.util.Date`和与其相关的...
`DateUtil.java`文件很可能是实现了一些通用的日期时间操作,如日期的转换、格式化、比较等。在实际项目中,这样的工具类可以帮助简化代码,提高可读性和可维护性。通常,`DateUtil`类会包含以下方法: - 将`Date`...
- Date类不推荐用于新的开发,因为java.util.Calendar和java.text.DateFormat类提供了更全面的日期和时间处理功能。 ### java.util.Calendar Calendar类是一个抽象类,它提供了一种方式来将日期和时间分解成年、月...
这个资源提供了Java中日期计算的全面指南。文档涵盖了日期计算的基本概念,包括如何计算两个日期之间的差异,如何格式化日期以及如何处理时区。此外,文档还提供了各种日期计算任务的详细代码示例和实现细节。 文档...
在Java编程环境中,处理Excel文档是一项常见的任务,无论是读取数据、写入数据还是进行复杂的分析,都需要专门的库来支持。本知识点将详细介绍如何使用Java处理Excel文档,并结合提供的API说明文件,帮助开发者更...
以上总结的知识点涵盖了Java中处理日期时间的常用类和方法,包括Date、Calendar、GregorianCalendar、DateFormat以及SimpleDateFormat等,它们在不同场景下的应用,以及示例代码的展示,从而构成一份Java日期转换...
在Java编程中,处理日期和时间是常见的任务之一,尤其是涉及到农历和公历节日的计算。这个主题主要涵盖如何在Java中实现农历和公历节日的计算,这对于开发具有中国特色的日历应用或者需要处理农历数据的系统至关重要...
新的java.time包中的日期时间API包括了LocalDate、LocalTime、LocalDateTime等类,它们设计得更加合理,并且支持时区处理,使得日期时间操作更加直观和安全。 综上所述,Java 8通过引入Lambda表达式、函数式接口、...
在这个"时间日期工具类(包含java8新特性).zip"压缩包中,我们有两个文件:DateUtil.java和DateUtils.java,它们很可能是自定义的工具类,用来扩展Java的标准日期处理功能。 首先,我们来看Java 8引入的新特性。在...
1. Java日期时间类的概述 Java提供了多个用于日期和时间处理的类,主要分布在java.util包中。早期JDK版本中主要的类是Date和Calendar,其中Date类在JDK 1.0就已经存在,而Calendar类则在JDK 1.1中加入。Calendar是...
### JAVA时间格式化处理:深度解析与应用 #### 引言 在JAVA编程中,时间格式化处理是一项基本且至关重要的技能。无论是处理数据库记录、日志...通过本文的深入探讨,相信你已经对JAVA时间格式化处理有了全面的认识。
2. **日期处理**: - `DateJsonValueProcessor`:这是自定义的JSON值处理器,用于处理JSON中的日期对象。在JSON序列化和反序列化过程中,日期通常需要特殊处理,因为JSON本身并不直接支持日期类型。`DateUtil`可能...
首先,我们要提到的是`java.util.Date`类,它是早期Java日期处理的主要工具。然而,由于其设计上的不足,如易混淆的日期时间格式化以及不支持时区转换,使得这个API在实际使用中存在诸多不便。`Date`类主要包含了...
Java 提供了多种日期处理类,如 Date、Calendar、LocalDateTime 等,用于处理日期和时间。 比较器 Java 比较器(Java Comparator)是一种接口,用于比较对象。比较器可以用于排序、过滤和搜索对象。 正则表达式 ...
Java 8对日期和时间API进行了全面改造,引入了java.time包,提供了更加易用和灵活的日期、时间、时区处理功能。 九、反射与注解 反射允许在运行时检查和操作类、接口、字段和方法。注解是一种元数据,可以用于代码...
Java SE(标准版)提供了丰富的API,如IO、NIO、网络编程、日期时间API、XML处理等。 11. **Java EE与Spring框架** Java EE(企业版)提供了服务器端开发的框架和API,Spring框架是Java EE开发中最常用的一个,它...
本项目通过Java语言实现了电子万年历的功能,利用了Swing库中的各种组件来构建用户界面,并运用了Java中的日期处理类来实现日期的计算和显示。此外,还考虑了跨平台的设计,使得程序能够在不同的操作系统上运行时...