- 浏览: 37005 次
- 性别:
- 来自: 深圳
最新评论
package com.wnk.fitvogue.util.common;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
/**
* @author liuxmi
* 日期相关函数类
*/
public class DateFunc {
/**
* AM/PM
*/
public static final String AM_PM = "a";
/**
* 一个月里第几天
*/
public static final String DAY_IN_MONTH = "dd";
/**
* 一年里第几天
*/
public static final String DAY_IN_YEAR = "DD";
/**
* 一周里第几天(Sunday,...)
*/
public static final String DAY_OF_WEEK = "EEEE";
/**
* 以天为单位
*/
public static final int DIFF_DAY = Calendar.DAY_OF_MONTH;
/**
* 以小时为单位
*/
public static final int DIFF_HOUR = Calendar.HOUR_OF_DAY;
/**
* 以毫秒为单位
*/
public static final int DIFF_MILLSECOND = Calendar.MILLISECOND;
/**
* 以分钟为单位
*/
public static final int DIFF_MINUTE = Calendar.MINUTE;
/**
* 以月份为单位,按照每月30天计算
*/
public static final int DIFF_MONTH = Calendar.MONTH;
/**
* 以秒为单位
*/
public static final int DIFF_SECOND = Calendar.SECOND;
/**
* 以星期为单位,按照每星期7天计算
*/
public static final int DIFF_WEEK = Calendar.WEEK_OF_MONTH;
/**
* 以年为单位,按照每年365天计算
*/
public static final int DIFF_YEAR = Calendar.YEAR;
/**
* 半天内小时(0-11)
*/
public static final String HOUR_IN_APM = "KK";
/**
* 一天内小时(0-23)
*/
public static final String HOUR_IN_DAY = "HH";
/**
* 半天内小时(1-12)
*/
public static final String HOUR_OF_APM = "hh";
/**
* 一天内小时(1-24)
*/
public static final String HOUR_OF_DAY = "kk";
/**
* 年(四位)
*/
public static final String LONG_YEAR = "yyyy";
/**
* 毫秒
*/
public static final String MILL_SECOND = "SSS";
/**
* 分钟
*/
public static final String MINUTE = "mm";
/**
* 月
*/
public static final String MONTH = "MM";
/**
* 秒
*/
public static final String SECOND = "ss";
/**
* 年(二位)
*/
public static final String SHORT_YEAR = "yy";
/**
* 一个月里第几周
*/
public static final String WEEK_IN_MONTH = "W";
/**
* 一年里第几周
*/
public static final String WEEK_IN_YEAR = "ww";
//设置时间时区
static{
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
}
/**
* 检查目的时间是否已超过源时间值加上时间段长度
* <p>
* 用于判别当前是否已经超时
*
* @param destDate 目的时间,一般为当前时间
* @param sourceDate 源时间,一般为事件产生时间
* @param type 时间计算单位,为分钟、小时等
* @param elapse 持续时间长度
* @return 是否超时
* @throws CodedException
*/
public static boolean compareElapsedTime(
Date destDate,
Date sourceDate,
int type,
int elapse)
throws RuntimeException {
if (destDate == null || sourceDate == null)
throw new RuntimeException("compared date invalid");
return destDate.getTime() > getRelativeDate(sourceDate, type, elapse).getTime();
}
/**
* 取当前时间字符串
* <p>
* 时间字符串格式为:年(4位)-月份(2位)-日期(2位) 小时(2位):分钟(2位):秒(2位)
*
* @return 时间字符串
*/
public static String getCurrentDateString() {
return getCurrentDateString("yyyy-MM-dd HH:mm:ss");
}
/**
* 按格式取当前时间字符串
*
* @param formatString 格式字符串
* @return
*/
public static String getCurrentDateString(String formatString) {
Date currentDate = new Date();
return getDateString(currentDate, formatString);
}
/**
* 取当天在一周的第几天
* @return
*/
public static int getCurrentDayOfWeek() {
return getDayOfWeek(new Date());
}
/**
*
* @Enclosing_Method: getCurrentDate
* @Written by: liuxmi
* @Creation Date: Jun 9, 2010 7:31:50 AM
* @version: v1.00
* @Description:获取当前时间
* @return
* @return Date
*
*/
public static Date getCurrentDate() {
return getDateFromString(getDateString(new Date(), "yyyy-MM-dd HH:mm:ss"), "yyyy-MM-dd HH:mm:ss");
}
/**
*
* @Enclosing_Method: getDate
* @Written by: liuxmi
* @Creation Date: Jun 9, 2010 7:32:11 AM
* @version: v1.00
* @Description: 日期格式化
* @param date
* @return
* @return Date
*
*/
public static Date getDate(Date date) {
return getDateFromString(getDateString(date, "yyyy-MM-dd"), "yyyy-MM-dd");
}
/**
* 根据时间字符串生成时间
*
* @param dateString 时间字符串格式
* @return 时间
* @throws RuntimeException
*/
public static Date getDateFromString(String dateString)
throws RuntimeException {
return getDateFromString(dateString, "yyyy-MM-dd HH:mm:ss");
}
/**
* 根据字符串生成时间
*
* @param dateString 时间字符串
* @param pattern 时间字符串格式定义
* @return 时间
* @throws RuntimeException
*/
public static Date getDateFromString(String dateString, String pattern)
throws RuntimeException {
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
Date date = null;
try {
date = dateFormat.parse(dateString);
} catch (java.text.ParseException e) {
throw new RuntimeException(
"parse date string '"
+ dateString
+ "' with pattern '"
+ pattern
+ "' failed: "
+ e.getMessage());
}
return date;
}
/**
* 取时间字符串
*
* @param date 时间
* @return 时间字符串
*/
public static String getDateString(Date date) {
return getDateString(date, "yyyy-MM-dd HH:mm:ss");
}
/**
* 取时间字符串
*
* @param date 时间
* @param formatString 转换格式
* @return 时间字符串
*/
public static String getDateString(Date date, String formatString) {
return getDateString(date, formatString, Locale.PRC);
}
/**
* 取时间字符串
*
* @param date 时间
* @param formatString 转换格式
* @param locale 地区
* @return 时间字符串
*/
public static String getDateString(Date date, String formatString, Locale locale) {
if (date == null)
return null;
SimpleDateFormat dateFormat = new SimpleDateFormat(formatString);
return dateFormat.format(date);
}
/**
* 取日期在一周的第几天
*
* @param date 日期
* @return
*/
public static int getDayOfWeek(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DAY_OF_WEEK);
}
/**
* 取日期在一月的第几天
*
* @param date 日期
* @return
*/
public static int getDayOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DAY_OF_MONTH);
}
/**
* 取一个月的最大天数
*
* @param date 日期
* @return
*/
public static int getDaysOfMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
/**
* 取日期所在月份的最大天数
*
* @param date 日期
* @return
*/
public static int getMaximumDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.getMaximum(Calendar.DAY_OF_MONTH);
}
/**
* 根据源时间和时长计算目的时间
*
* @param date 源时间
* @param type 时间单位
* @param relate 时长
* @return 目的时间
*/
public static Date getRelativeDate(Date date, int type, int relate) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(type, relate);
return calendar.getTime();
}
/**
* 根据当前时间和时长计算目的时间
*
* @param type 时间单位
* @param relate 时长
* @return 目的时间
*/
public static Date getRelativeDate(int type, int relate) {
Date current = new Date();
return getRelativeDate(current, type, relate);
}
/**
* 根据当前时间和时长生成目的时间字符串
*
* @param type 时间单位
* @param relate 时长
* @param formatString 时间格式
* @return 时间字符串
*/
public static String getRelativeDateString(
int type,
int relate,
String formatString) {
return getDateString(getRelativeDate(type, relate), formatString);
}
public static Date getStartDate(Date date) {
return getDateFromString(getDateString(date, "yyyyMMdd") + "00:00:00", "yyyyMMddHH:mm:ss");
}
public static Date getEndDate(Date date) {
return getDateFromString(getDateString(date, "yyyyMMdd") + "23:59:59", "yyyyMMddHH:mm:ss");
}
/**
* 取时间戳字符串
*
* @param date 时间
* @return 时间戳字符串
*/
public static String getTimestampString(Date date) {
return getDateString(date, "yyyyMMddHHmmssSSS");
}
/**
* 取当天日期值
*
* @return 日期的整数值
*/
public static int getToday() {
return Integer.parseInt(getCurrentDateString("dd"));
}
public static long getTimeDiff(Date fromDate, Date toDate, int type) {
fromDate = (fromDate == null) ? new Date() : fromDate;
toDate = (toDate == null) ? new Date() : toDate;
long diff = toDate.getTime() - fromDate.getTime();
switch(type) {
case DIFF_MILLSECOND:
break;
case DIFF_SECOND:
diff /= 1000;
break;
case DIFF_MINUTE:
diff /= 1000 * 60;
break;
case DIFF_HOUR:
diff /= 1000 * 60 * 60;
break;
case DIFF_DAY:
diff /= 1000 * 60 * 60 * 24;
break;
case DIFF_MONTH:
diff /= 1000 * 60 * 60 * 24 * 30;
break;
case DIFF_YEAR:
diff /= 1000 * 60 * 60 * 24 * 365;
break;
default:
diff = 0;
break;
}
return diff;
}
/**
* 比较时间戳是否相同
*
* @param arg0 时间
* @param arg1 时间
* @return 是否相同
*/
public static boolean isTimestampEqual(Date arg0, Date arg1) {
return getTimestampString(arg0).compareTo(getTimestampString(arg1)) == 0;
}
/**
*
* @Enclosing_Method: nDaysAfterNowDate
* @Written by: liuxmi
* @Creation Date: May 25, 2010 6:11:01 AM
* @version: v1.00
* @Description: 当前日期加减n天后的日期
* @param n
* @return
* @return Date
*
*/
public static Date nDaysAfterNowDate(int n) {
Calendar rightNow = Calendar.getInstance();
rightNow.add(Calendar.DAY_OF_MONTH,+n);
return rightNow.getTime();
}
/**
*
* @Enclosing_Method: nDaysAfterOneDateString
* @Written by: liuxmi
* @Creation Date: May 25, 2010 6:12:37 AM
* @version: v1.00
* @Description: 给定一个日期型字符串,返回加减n天后的日期型字符串
* @param basicDate
* @param n
* @return
* @return String
*
*/
public static String nDaysAfterOneDateString(String basicDate,int n) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date tmpDate = null;
try {
tmpDate = df.parse(basicDate);
}
catch(Exception e){
System.out.println("dateformat:"+e.getMessage());
}
long nDay=(tmpDate.getTime()/(24*60*60*1000)+1+n)*(24*60*60*1000);
tmpDate.setTime(nDay);
return df.format(tmpDate);
}
/**
*
* @Enclosing_Method: nDaysAfterOneDate
* @Written by: liuxmi
* @Creation Date: May 25, 2010 6:13:45 AM
* @version: v1.00
* @Description: 给定一个日期,返回加减n天后的日期
* @param basicDate
* @param n
* @return
* @return Date
*
*/
public static Date nDaysAfterOneDate(Date basicDate,int n) {
long nDay=(basicDate.getTime()/(24*60*60*1000)+n)*(24*60*60*1000);
basicDate.setTime(nDay);
return basicDate;
}
/**
*
* @Enclosing_Method: nDaysBetweenTwoDate
* @Written by: liuxmi
* @Creation Date: May 25, 2010 6:14:10 AM
* @version: v1.00
* @Description: 计算两个日期相隔的天数
* @param firstDate
* @param secondDate
* @return
* @return int
*
*/
public static int nDaysBetweenTwoDate(Date firstDate,Date secondDate) {
int nDay=(int)((secondDate.getTime()-firstDate.getTime())/(24*60*60*1000));
return nDay;
}
/**
*
* @Enclosing_Method: nYearsBetweenTwoDate
* @Written by: liuxmi
* @Creation Date: May 25, 2010 6:56:55 AM
* @version: v1.00
* @Description: 计算两个日期相隔的年数
* @param firstDate
* @param secondDate
* @return
* @return int
*
*/
public static int nYearsBetweenTwoDate(Date firstDate,Date secondDate) {
int nYear=nDaysBetweenTwoDate(firstDate, secondDate)/365+1;
return nYear;
}
/**
*
* @Enclosing_Method: nDaysBetweenTwoDate
* @Written by: liuxmi
* @Creation Date: May 25, 2010 6:32:15 AM
* @version: v1.00
* @Description: 计算两个日期相隔的天数
* @param firstString
* @param secondString
* @return
* @return int
*
*/
public static int nDaysBetweenTwoDate(String firstString,String secondString) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date firstDate=null;
Date secondDate=null;
try {
firstDate = df.parse(firstString);
secondDate=df.parse(secondString);
}
catch(Exception e) {
System.out.println("dateformat:"+e.getMessage());
}
int nDay=(int)((secondDate.getTime()-firstDate.getTime())/(24*60*60*1000));
return nDay;
}
/**
*
* @Enclosing_Method: getSundayOneDate
* @Written by: liuxmi
* @Creation Date: May 28, 2010 1:36:06 AM
* @version: v1.00
* @Description: 获取给定日期所在的周的第一天
* @param date
* @return void
*
*/
public static Date getFirstOfWeekOneDate(Date date){
int day = DateFunc.getDayOfWeek(date);
Date sunDay = DateFunc.getRelativeDate(date, DateFunc.DIFF_DAY,-(day-1) );
return getDate(sunDay);
}
/**
*
* @Enclosing_Method: getWeeksOfYear
* @Written by: liuxmi
* @Creation Date: May 28, 2010 4:02:48 AM
* @version: v1.00
* @Description: 返回给定日期在有一年中的第几周
* @param date
* @return
* @return int
*
*/
public static int getWeeksOfYear(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.WEEK_OF_YEAR);
}
}
发表评论
-
java 字节与数组之间转换
2012-05-21 17:22 0转自: http://origin100.iteye. ... -
jsp 标签 According to TLD or attribute directive in tag file...异常
2011-11-14 13:04 1264jstl报org.apache.jasper.JasperEx ... -
数字转对应的excel列字母
2011-10-31 21:44 1155String[] str = new string[]{ ... -
equals()与==的区别
2011-07-12 20:48 9411. equals只能对对象进行比较,不能用于基本类型的比较, ... -
synchronized 实例
2011-06-29 22:57 1003synchronized Java语言的关键字,当它用来修饰 ... -
JSP隐含对象
2009-04-12 20:49 651JSP的9个隐含对象: 1.request就是HttpSer ... -
jQuery异步加载实例
2009-08-16 20:44 836主页面 main.html <html>< ... -
java日期格式处理及月份第一天和最后一天
2009-09-11 20:33 1164import java.text.SimpleDateForm ... -
java文件操作
2010-08-21 07:54 695package com.wnk.fitvogue.util; ...
相关推荐
在Java中,工具类通常包含静态方法,不涉及实例化,它们提供的功能包括但不限于字符串处理、日期时间操作、集合操作、数学计算、IO流处理、网络通信等。下面将对这些常见的工具类及其功能进行详细介绍: 1. **...
Java提供了多种日期工具类,帮助开发者方便地操作日期。本文将深入探讨Java中常用的日期工具类,并通过示例代码`DateUtil.java`来进一步解释。 1. **`java.util.Date`**: `java.util.Date`是Java最早提供的日期类...
Java操作时间工具类是开发者日常工作中经常会用到的模块,特别是在处理日期和时间相关的业务逻辑时。本工具类主要是为了方便地对日期和时间进行格式化、比较、计算等操作,提高开发效率。下面我们将详细探讨Java中...
3. **日期和时间处理**:JavaScript的Date对象可能与C#的DateTime类不完全兼容,工具类可能提供了适应后台环境的日期和时间处理方法。 4. **字符串操作**:提供常用的字符串处理函数,如格式化、查找、替换等。 5....
`SimpleDateFormat`是`java.text`包中的一个具体类,它是一个强大的日期和时间格式化工具。通过提供模式字符串,你可以定制日期和时间的显示格式。例如,"yyyy-MM-dd HH:mm:ss"模式会将日期格式化为“年-月-日 时:分...
首先,Java中最基础的日期类是`java.util.Date`。这个类自Java 1.0起就存在,但它的设计并不完美,因为它不区分时间和日期,且不支持国际化。然而,由于历史原因,`Date`类在许多旧代码中仍然广泛使用。`Date`类的...
3. **日期和时间处理**:`java.util.Date`和`java.util.Calendar`是处理日期和时间的基础工具类,但它们的设计并不完美。在Java 8之后,引入了`java.time`包,包含`LocalDate`, `LocalTime`, `LocalDateTime`等新类...
以上就是关于“java完美按格式字符String转sql.date”的详细解释,通过理解并应用这些知识,你可以轻松地在Java程序中处理日期字符串与SQL日期之间的转换。在实际开发中,根据具体需求,可能还需要考虑异常处理、...
[DateChooser.java] Java 日期选择控件(主体类) [public] [TablePanel.java] 日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet....
在工具类方面,`java.time.LocalDateTime.now()`可以获取当前的日期和时间,`java.time.LocalDate.of(year, month, day)`允许你创建指定日期的实例,而`java.time.format.DateTimeFormatter.ISO_LOCAL_DATE_TIME`则...
本项目“Java完美导出Excel程序”是利用Java技术实现的一种高效、灵活的数据导出工具,它允许开发者通过输入SQL查询和指定Excel文件名,自动生成包含查询结果的Excel文件。这一功能在数据分析、报表生成以及数据共享...
《Java完美编程第三版》是一本专为Java程序员和学习者设计的专业教程,全面涵盖了Java编程的核心概念和技术。这本书以其详尽的解释、丰富的实例和深入的分析,为读者提供了全面掌握Java编程语言的坚实基础。 1. **...
[DateChooser.java] Java 日期选择控件(主体类) [public] [TablePanel.java] 日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet....
[DateChooser.java] Java 日期选择控件(主体类) [public] [TablePanel.java] 日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet....
4. **Calendar**: `Calendar`是比`Date`更强大的日期和时间工具类。它提供了日历字段的计算和操作,比如获取星期几、月份、年份等。`Calendar`是抽象类,实际使用时需要通过`getInstance()`获取具体的实现,如`...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
[DateChooser.java] Java 日期选择控件(主体类) [public] [TablePanel.java] 日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet....
Java日志工具是Java开发中不可或缺的部分,它们用于记录应用程序运行时的信息,包括错误、警告、调试信息等,有助于开发者追踪程序状态,定位问题。在Java世界里,有多个常用的日志框架,如Log4j、Java Util Logging...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
【JAVA使用POI操作Excel...通过上述步骤,我们可以利用Apache POI库在Java中灵活地处理Excel文件,无论是读取数据还是创建新的工作表。无论是在数据分析、报表生成还是数据导入导出场景中,POI都是一个非常实用的工具。