`
shihuan830619
  • 浏览: 582800 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java常用日期辅助类

    博客分类:
  • J2SE
阅读更多
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
* 日期辅助类
* @author yushibo
*/
public final class DateHelper {

private static DateHelper instance = new DateHelper();

public static DateHelper getInstance() {
return instance;
}

/**
* 日期标值枚举
* @author SuZhongQing
*/
public enum DateRangeFlag {
THIS_DAY, THIS_WEEK, THIS_MONTH
}

/**
* 根据指定格式的日期字符串获得日期
* @param dateStr 日期字符串 格式如:(yyyy-MM-dd)
* @return 日期
*/
public static Date getDateByString(String dateStr) {
String[] elements = dateStr.split("-");
if (elements.length != 3) {
return new Date();
}

Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, Integer.parseInt(elements[0]));
cal.set(Calendar.MONTH, Integer.parseInt(elements[1]) - 1);
cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(elements[2]));

return cal.getTime();
}

/**
* 根据日期,返回指定格式的日期字符串"yyyy-MM-dd"
* @param date
* @return 指定格式的日期字符串
*/
public static String getFormatString(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return date == null ? "" : sdf.format(date);
}

/**
* 方法名:getFullFormateString
* 方法描述:获取包含小时、分钟、秒的时间字符串 "yyyy-MM-dd HH:mm:ss"
* @param date 日期
* @return 指定格式的日期字符串
*/
public static String getFullFormateString(Date date){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return date == null ? "" : sdf.format(date);
}

/**
*
* 方法描述:获取当前日期包含小时、分钟、秒的时间字符串 "yyyy-MM-dd HH:mm:ss"
* @param date 日期
* @return 指定格式的日期字符串
*/
public static String getNowFullFormateString(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(new Date());
}


/**
* 根据指定的日期范围标值,返回指定的开始日期和结束日期
*
* @param date
*            日期
* @param flag
*            日期范围标值
* @return 日期数组,第一个元素为开始日期,第二个元素为结束日期
*/
public static Date[] getDatesByFlag(Date date, DateRangeFlag flag) {
Date[] dates = new Date[2];
Calendar beginCal = Calendar.getInstance();
Calendar endCal = Calendar.getInstance();
beginCal.setTime(date);
endCal.setTime(date);

switch (flag) {
case THIS_DAY:
beginCal.set(Calendar.DAY_OF_MONTH, beginCal
.get(Calendar.DAY_OF_MONTH) - 1);
beginCal.set(Calendar.HOUR_OF_DAY, 0);
beginCal.set(Calendar.MINUTE, 0);
beginCal.set(Calendar.SECOND, 0);

endCal.set(Calendar.DAY_OF_MONTH,
endCal.get(Calendar.DAY_OF_MONTH) - 1);
endCal.set(Calendar.HOUR_OF_DAY, 23);
endCal.set(Calendar.MINUTE, 59);
endCal.set(Calendar.SECOND, 59);
dates[0] = beginCal.getTime();
dates[1] = endCal.getTime();
break;

case THIS_WEEK:
beginCal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
beginCal.set(beginCal.get(Calendar.YEAR), beginCal
.get(Calendar.MONTH),
beginCal.get(Calendar.DAY_OF_MONTH) - 7);
beginCal.set(Calendar.HOUR_OF_DAY, 0);
beginCal.set(Calendar.MINUTE, 0);
beginCal.set(Calendar.SECOND, 0);

endCal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
endCal.set(endCal.get(Calendar.YEAR), endCal.get(Calendar.MONTH),
endCal.get(Calendar.DAY_OF_MONTH) - 1);
endCal.set(Calendar.HOUR_OF_DAY, 23);
endCal.set(Calendar.MINUTE, 59);
endCal.set(Calendar.SECOND, 59);

dates[0] = beginCal.getTime();
dates[1] = endCal.getTime();
break;

case THIS_MONTH:
beginCal.set(Calendar.MONTH, beginCal.get(Calendar.MONTH) - 1);
beginCal.set(beginCal.get(Calendar.YEAR), beginCal
.get(Calendar.MONTH), 1);
beginCal.set(Calendar.HOUR_OF_DAY, 0);
beginCal.set(Calendar.MINUTE, 0);
beginCal.set(Calendar.SECOND, 0);

endCal.set(Calendar.MONTH, endCal.get(Calendar.MONTH));
endCal.set(Calendar.DAY_OF_MONTH, -1);
endCal.set(Calendar.HOUR_OF_DAY, 23);
endCal.set(Calendar.MINUTE, 59);
endCal.set(Calendar.SECOND, 59);

dates[0] = beginCal.getTime();
dates[1] = endCal.getTime();
break;
}
return dates;
}

public static DateRangeFlag getDateRangeEnum(int dateFlag) {
switch (dateFlag) {
case 2:
return DateRangeFlag.THIS_WEEK;
case 3:
return DateRangeFlag.THIS_MONTH;

default:
return DateRangeFlag.THIS_DAY;
}
}

public static Date getBeginDate(Date beginDate) {
Calendar cal = Calendar.getInstance();
cal.setTime(beginDate);
cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH));

cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
return cal.getTime();
}

public static Date getEndDate(Date endDate) {
Calendar cal = Calendar.getInstance();
cal.setTime(endDate);

cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, 23);
cal.set(Calendar.MINUTE, 59);
cal.set(Calendar.SECOND, 59);
return cal.getTime();
}

/**
* 返回当前时间在当年是第几周
**/
public static int getWeekOfYear(){
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
return cal.get(Calendar.WEEK_OF_YEAR)-1;
}

/**
* @param flag  true:返回上周第一天, false:返回上周最后一天
* 返回上周的开始日期或结束日期
**/
public static String getFirstDateOfPreWeek(boolean flag){
Calendar cal = Calendar.getInstance();
//获取当前时间
long today = cal.getTimeInMillis();
//设定周一是每周的第一天
cal.setFirstDayOfWeek(Calendar.MONDAY);
//得到当天处在当周的第几天,周一是当周的第一天
int dayNum = cal.get(Calendar.DAY_OF_WEEK)-1;
// System.out.println(dayNum);

if(dayNum == 0){
if(flag){
cal.setTimeInMillis(today - (13 - dayNum) * 24 * 60 * 60 * 1000);
}else{
cal.setTimeInMillis(today - (7 - dayNum) * 24 * 60 * 60 * 1000);
}
}else if(dayNum >= 1 && dayNum < 7){
if(flag){
cal.setTimeInMillis(today - (dayNum - 1 + 7) * 24 * 60 * 60 * 1000);
    }else{
    cal.setTimeInMillis(today + (7 - dayNum - 7) * 24 * 60 * 60 * 1000);
    }
}
return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
}

/**
* @param flag  true:返回上两周第一天, false:返回上两周最后一天
* 返回上两周的开始日期或结束日期
**/
public static String getFirstDateOfPre2Week(boolean flag){
Calendar cal = Calendar.getInstance();
//获取当前时间
long today = cal.getTimeInMillis();
//设定周一是每周的第一天
cal.setFirstDayOfWeek(Calendar.MONDAY);
//得到当天处在当周的第几天,周一是当周的第一天
int dayNum = cal.get(Calendar.DAY_OF_WEEK)-1;
// System.out.println(dayNum);

if(dayNum == 0){
if(flag){
cal.setTimeInMillis(today - (20 - dayNum) * 24 * 60 * 60 * 1000);
}else{
cal.setTimeInMillis(today - (14 - dayNum) * 24 * 60 * 60 * 1000);
}
}else if(dayNum >= 1 && dayNum < 7){
if(flag){
cal.setTimeInMillis(today - (dayNum - 1 + 14) * 24 * 60 * 60 * 1000);
    }else{
    cal.setTimeInMillis(today + (7 - dayNum - 14) * 24 * 60 * 60 * 1000);
    }
}
return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
}

/**
* 返回当前时间的年份
**/
public static int getYear(){
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
return cal.get(Calendar.YEAR);
}

/**
* 返回当前时间的月份
**/
public static int getMonth(){
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
return cal.get(Calendar.MONTH);
}

/**
* 判断某个年份是否为闰年
* @return true是闰年,false不是闰年
**/
public static boolean isLeapYear(int yearparam){
boolean flag = false;  
if(yearparam%4 != 0){      
flag = false;  
}else if(yearparam%100 != 0){     
flag = true;  
}else if(yearparam%400 != 0){  
flag = false;     
}else{  
flag = true;  
}         
 
// if(flag == true){  
// System.out.println("是闰年");  
// }else{  
// System.out.println("不是闰年");  
// }

return flag;
}

public static boolean isLeapYear2(int yearparam){
Calendar calendar = Calendar.getInstance();  
boolean flag = ((GregorianCalendar)calendar).isLeapYear(yearparam);

// if(flag == true){  
// System.out.println("是闰年");  
// }else{  
// System.out.println("不是闰年");  
// }

return flag;
}

/**
* 返回当前年当前月份最大天数
**/
public static int getMaxDayOfCurMonth(){
Calendar cal = Calendar.getInstance();
    cal.set(Calendar.DATE, 1);  //把日期设置为当月第一天
    cal.roll(Calendar.DATE, -1);  //日期回滚一天,也就是最后一天
    int maxDate = cal.get(Calendar.DATE);
//    System.out.println("当月最大天数:" + maxDate);
    return maxDate;
}

/**
* 返回当前年上月份最大天数
**/
public static int getMaxDayOfPreMonth(){
//取得系统当前时间
    Calendar cal = Calendar.getInstance();
    //取得系统当前时间所在月第一天时间对象
    cal.set(Calendar.DAY_OF_MONTH, 1);
    //日期减一,取得上月最后一天时间对象
    cal.add(Calendar.DAY_OF_MONTH, -1);
    //输出上月最后一天日期
//    System.out.println("上月最大天数:" + cal.get(Calendar.DAY_OF_MONTH));
    int maxDate = cal.get(Calendar.DAY_OF_MONTH);
    return maxDate;
}

/**
* 返回某年某月最大天数
**/
public static int getMaxDayOfMonth(int yearparam, int monthparam){
int[] daysInMonth = new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};  //平年每月天数
if(isLeapYear2(yearparam)){  //判断是否为闰年
if(monthparam == 2){
return 29;
    }
}

return daysInMonth[monthparam - 1];
}

// public static void main(String[] args) {
//
// }
}
分享到:
评论

相关推荐

    java 常用辅助工具类

    在Java编程中,辅助工具类是非常重要的一部分,它们提供了一系列常用的方法,帮助开发者高效地处理各种常见任务。这里我们主要探讨的是"java 常用辅助工具类",包括字符串操作、数字操作、数据库交互以及日期时间...

    一些java常用的工具类

    JUnit是Java中广泛使用的单元测试框架,它提供了断言、测试套件等功能,帮助开发者编写可测试的代码。 总之,Java工具类是提高开发效率的关键,它们封装了常见的操作,减少了代码重复,提高了代码可读性和维护性。...

    Java类库 java中常用的类 可以参考

    本文档旨在介绍 Java 中一些常用的类库,帮助初学者更好地理解和使用这些类库。尽管文档内容并不全面,但包含了大多数常用的类库,对于新手来说较为易懂。 #### 二、Java 常用类库详解 ##### 1. `java.applet` - ...

    项目中常用java常用封装类

    String类在Java中是不可变的,这意味着一旦创建了String对象,其内容就不能被修改。因此,我们经常需要创建一些辅助方法来处理字符串,比如去除前后空格、替换特定字符、分割字符串等。例如,可以创建一个`...

    28个java常用的工具类源码

    这里提到的"28个java常用的工具类源码"包含了Java开发中经常用到的一些实用工具类的源代码,可以帮助开发者深入理解这些类的工作原理,提升编程效率。下面我们将详细讨论这些工具类可能包含的知识点: 1. **...

    java常用工具类集合(也有转自他人的)

    总结来说,"java常用工具类集合"是一个涵盖了多种实用工具类的资源,包括但不限于字符串处理、集合操作、日期时间、IO操作等多个方面。通过学习和应用这些工具类,开发者能够更高效地编写代码,同时也能从开源社区中...

    我自己的常用Java工作辅助类

    我自己一直使用的辅助类,压缩包的内容如下:DateUtil.java日期操作类.MyFiles.java文件操作类.ReadWebs.java调用远程页面的方法类.StringUtil.java字符串转换操作类.Uploadfile.java校验文件大小及格式的类

    28个java常用的工具类

    25. **RegexHelper类**:正则表达式辅助类,封装了常见的正则表达式操作。 26. **DateTimeUtil类**:日期时间工具类,可能包含日期时间的转换、格式化等方法。 27. **TypeConverter类**:数据类型转换工具类,方便...

    Java常用Util类Jar

    在Java中,`java.util` 包是最基础也是最常用的工具类集合,而"Java常用Util类Jar"则是一个包含了更多自定义或者网络上流行实用工具类的集合,适用于Web项目的快速开发。 这个压缩包中的`ZycUtil`可能是一个自定义...

    JAVA28个常用工具类

    在Java编程语言中,工具类(Utility Class)是封装了常用功能的方法集合,方便开发者在项目中快速调用,提高代码复用性。以下是对给定的九个工具类的详细说明: 1. **FileUtils.java**: 文件操作工具类,提供了处理...

    java各种常用的工具类封装 源码

    1. **DateUtil**: Java中的日期时间处理在早期版本中较为复杂,`DateUtil` 类通常是为了封装`java.util.Date`、`Calendar` 和 `java.time` 包中的类,提供方便的日期时间操作。例如,获取当前日期、格式化日期字符串...

    28个java常用的工具类.rar

    3. **日期与时间**:处理日期和时间在Java中相对复杂,工具类可能封装了`java.util.Date`和`java.time`包中的API,提供易用的日期和时间转换、计算等功能。 4. **IO流操作**:Java的IO流操作通常涉及大量的读写和...

    java常用工具类已经打成jar包包含源码

    通过这种方式,可以逐步积累和整理项目中常用的功能,形成一套适合自己团队的工具集,进一步提升开发效率。 总的来说,这个"java常用工具类已经打成jar包包含源码"的资源,是一个非常有价值的开发辅助工具,它提供...

    分享28个java常用的工具类源码打包下载

    在Java编程领域,工具类是开发过程中不可或缺的一部分,它们提供了常用的功能,使代码更加简洁、高效。本资源分享了28个Java常用的工具类源码,涵盖了多种实用功能,包括添加水印、文件上传、生成略缩图、文件操作、...

    java常用类库中文速查表

    首先,我们需要了解基础类库Commons Lang,它提供了对JDK中java.lang包的补充,提供了各种各样的Util工具类,简化了很多常用的编程操作。例如,它提供了一套用于字符串处理的工具方法,包括判断字符串是否为空、去除...

    java常用工具类

    此外,还有其他的工具类,如DateUtil处理日期时间,RegexUtil用于正则表达式操作,MathUtil提供数学计算辅助,ArrayListUtil和HashMapUtil则针对集合操作提供便利的方法。这些工具类的使用,能够使开发者更加专注于...

    Java常用工具类,字符串、日期、jdbc、xml解析等等

    在Java中,有许多内置的工具类,如`java.lang.String`、`java.util.Date`,以及第三方库如Apache Commons Lang和Google Guava等。下面我们将详细探讨这些工具类在字符串、日期、JDBC和XML解析等方面的使用。 1. **...

    java API 在包java.util中有一个GregorianCalendar类,使用它可以得到一年内某个月的日历.zip

    这个类是基于格里高利历(公历)的,是Java中最常用的日期时间类之一。在给定的压缩包文件中,可能包含了关于如何使用`GregorianCalendar`来获取一年内特定月份的日历信息的练习代码,如`Exercise6_6.java`,以及...

Global site tag (gtag.js) - Google Analytics