Java中的时间格式化和时间计算的方法
2011-08-18 15:11
519 查看
最近工程项目里需要频繁地计算时间,比如取得去年的今天,上个月的现在时间,前几天,后几天等等。一开始都是在需要的地方,写个方法,后来随着工程的开发,这样的时间计算和格式化需要的越来越多。干脆索性就直接写个日期时间管理类。下面就是具体方法代码:
首先定义一些静态常量,通常会作为参数来表达时间的格式等等:
项目里一般都是以现在时间作为参考,所以就直接定义了一个全局变量,并用构造方法初始化。
下面是Date时间和字符串时间互相转换的两个方法,主要是利用java.text.SimpleDateFormat类。其中由字符串转换为时间的时候,需要捕获异常。
下面就是利用GregorianCalendar类实现的获取前几个月(或后几个月的当前时间)的方法:
首先定义一些静态常量,通常会作为参数来表达时间的格式等等:
private static String TIME_PATTERN="HH:mm:ss";//定义标准时间格式 private static String DATE_PATTERN_1="yyyy/MM/dd";//定义标准日期格式1 private static String DATE_PATTERN_2="yyyy-MM-dd";//定义标准日期格式2 private static String DATE_PATTERN_3="yyyy/MM/dd HH:mm:ss";//定义标准日期格式3,带有时间 private static String DATE_PATTERN_4="yyyy/MM/dd HH:mm:ss E";//定义标准日期格式4,带有时间和星期 private static String DATE_PATTERN_5="yyyy年MM月dd日 HH:mm:ss E";//定义标准日期格式5,带有时间和星期 /** * 定义时间类型常量 */ private final static int SECOND=1; private final static int MINUTE=2; private final static int HOUR=3; private final static int DAY=4;
项目里一般都是以现在时间作为参考,所以就直接定义了一个全局变量,并用构造方法初始化。
private Date now; public Date getNow() { return now; } public void setNow(Date now) { this.now = now; } /** * 构造方法,初始化now时间 */ public DateTimeUtil(){ now=new Date(); }
下面是Date时间和字符串时间互相转换的两个方法,主要是利用java.text.SimpleDateFormat类。其中由字符串转换为时间的时候,需要捕获异常。
/** * 把一个日期,按照某种格式 格式化输出 * @param date 日期对象 * @param pattern 格式模型 * @return 返回字符串类型 */ public String formatDate(Date date, String pattern){ SimpleDateFormat sdf = new SimpleDateFormat(pattern); return sdf.format(date); } /** * 将字符串类型的时间转换为Date类型 * @param str 时间字符串 * @param pattern 格式 * @return 返回Date类型 */ public Date formatString(String str,String pattern){ SimpleDateFormat sdf = new SimpleDateFormat(pattern); Date time=null; //需要捕获ParseException异常,如不要捕获,可以直接抛出异常,或者抛出到上层 try { time = sdf.parse(str); } catch (ParseException e) { e.printStackTrace(); } return time; }由于需要计算时间差,例如前十分钟,前一天等等小额时间差,在这里利用将时间差转换为毫秒数,然后相加减,利用Date构造方法再转换为时间,所以就直接写了个根据时间差数值获取时间差毫秒数的方法。
/** * 将一个表示时间段的数转换为毫秒数 * @param num 时间差数值,支持小数 * @param type 时间类型:1->秒,2->分钟,3->小时,4->天 * @return long类型时间差毫秒数,当为-1时表示参数有错 */ public long formatToTimeMillis(double num, int type) { if (num <= 0) return 0; switch (type) { case SECOND: return (long) (num * 1000); case MINUTE: return (long) (num * 60 * 1000); case HOUR: return (long) (num * 60 * 60 * 1000); case DAY: return (long) (num * 24 * 60 * 60 * 1000); default: return -1; } }获取某一时间的月份和年份,一开始直接用的date.getMonth()方法和date.getYear()方法,不过还是Eclipse工具强大啊,当我写上时,一道横线提示我该方法已经过时,所以只好在换一个方法了。利用转换格式的写法写的。。。也不知道专不专业,先就这样写上了:
/** * 只输出一个时间中的月份 * @param date * @return 返回int数值类型 */ public int getMonth(Date date){ String month=formatDate(date, "MM");//只输出时间 return Integer.parseInt(month); } /** * 只输出一个时间中的年份 * @param date * @return 返回数值类型 */ public int getYear(Date date){ String year=formatDate(date, "yyyy");//只输出年份 return Integer.parseInt(year); }后来翻阅了下资料,发现Calendar类确实很强大啊,提供了很多方法和变量,可以直接使用。。。又将上面的方法改写了一下:
/** * 只输出一个时间中的月份 * @param date * @return 返回int数值类型 */ public int getMonth(Date date){ Calendar cal=Calendar.getInstance();//获得一个Calendar实例相当于Date date=new Date() return cal.MONTH; } /** * 只输出一个时间中的年份 * @param date * @return 返回数值类型 */ public int getYear(Date date){ Calendar cal=Calendar.getInstance();//获得一个Calendar实例相当于Date date=new Date() return cal.YEAR; }
/** * 得到一个日期函数的格式化时间 * @param date 日期对象 * @return */ public String getTimeByDate(Date date){ return formatDate(date, TIME_PATTERN); } /** * 获取当前的时间,new Date()获取当前的日期 * @return */ public String getNowTime(){ return formatDate(new Date(), TIME_PATTERN); }获得一指定时间的前(后)X分钟(秒/小时/天)的时间,分别有输出为Date时间类型和字符串类型,其实后来考虑还有更好地方法,就是利用GregorianCalendat类来实现。
/** * 获取某一指定时间的前一段时间 * @param num 时间差数值 * @param type 时间差类型:1->秒,2->分钟,3->小时,4->天 * @param date 参考时间 * @return 返回格式化时间字符串 */ public String getPreTimeStr(double num,int type, Date date){ long nowLong=date.getTime();//将参考日期转换为毫秒时间 Date time = new Date(nowLong-formatToTimeMillis(num, type));//减去时间差毫秒数 return getTimeByDate(time); } /** * 获取某一指定时间的前一段时间 * @param num 时间差数值 * @param type 时间差类型:1->秒,2->分钟,3->小时,4->天 * @param date 参考时间 * @return 返回Date对象 */ public Date getPreTime(double num,int type, Date date){ long nowLong=date.getTime();//将参考日期转换为毫秒时间 Date time = new Date(nowLong-formatToTimeMillis(num, type));//减去时间差毫秒数 return time; } /** * 获取某一指定时间的后一段时间 * @param num 时间差数值 * @param type 时间差类型:1->秒,2->分钟,3->小时,4->天 * @param date 参考时间 * @return 返回格式化时间字符串 */ public String getNextTimeStr(double num,int type, Date date){ long nowLong=date.getTime();//将参考日期转换为毫秒时间 Date time = new Date(nowLong+formatToTimeMillis(num, type));//加上时间差毫秒数 return getTimeByDate(time); } /** * 获取某一指定时间的后一段时间 * @param num 时间差数值 * @param type 时间差类型:1->秒,2->分钟,3->小时,4->天 * @param date 参考时间 * @return 返回Date对象 */ public Date getNextTime(double num,int type, Date date){ long nowLong=date.getTime();//将参考日期转换为毫秒时间 Date time = new Date(nowLong+formatToTimeMillis(num, type));//加上时间差毫秒数 return time; }
下面就是利用GregorianCalendar类实现的获取前几个月(或后几个月的当前时间)的方法:
/** * 得到前几个月的现在 * 利用GregorianCalendar类的set方法来实现 * @param num * @param date * @return */ public Date getPreMonthTime(int num, Date date){ GregorianCalendar gregorianCal = new GregorianCalendar(); gregorianCal.set(Calendar.MONTH, gregorianCal.get(Calendar.MONTH) - num); return gregorianCal.getTime(); } /** * 得到后几个月的现在时间 * 利用GregorianCalendar类的set方法来实现 * @param num * @param date * @return */ public Date getNextMonthTime(int num, Date date){ GregorianCalendar gregorianCal = new GregorianCalendar(); gregorianCal.set(Calendar.MONTH, gregorianCal.get(Calendar.MONTH) + num); return gregorianCal.getTime(); }从该方法中可以看到GregorianCalendar类中的set方法很好的解决了计算间隔时间差得具体时间,如果是计算前几年,前几天,等地时候只要吧set()方法中第一个变量换成Calendar.YEAR,Calendar.DAY_OF_MONTH,Calendar.MINUTE即可。下面是是API文档里的介绍:
GregorianCalendar为每个日历字段使用以下默认值(如果该值未定义)。
字段 | 默认值 |
ERA | AD |
YEAR | 1970 |
MONTH | JANUARY |
DAY_OF_MONTH | 1 |
DAY_OF_WEEK | 一个星期的第一天 |
WEEK_OF_MONTH | 0 |
DAY_OF_WEEK_IN_MONTH | 1 |
AM_PM | AM |
HOUR, HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND | 0 |
该文章为《Kevin's Blog》原创,转载请注明出处:/article/10578386.html |
相关文章推荐
- Java中的时间格式化和时间计算的方法 date calendar类详解~~~perfect
- Java中的时间格式化和时间计算的方法
- Java中的时间格式化和时间计算的方法
- Java计算两个日期时间之间的天数最简方法
- java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
- Java,.NET中当前时间获取、格式化方法比较
- 计算Java中任意一个方法的执行时间的工具类
- java中时间格式化的方法
- java时间日期计算方法
- Java 时间测量、耗时计算方法
- java Date时间的格式化,计算,字符串的转换
- c与java中计算程序执行时间的方法
- java计算两个时间相差天数的方法汇总
- C与Java中计算程序执行时间的方法
- java 计算一个方法的返回执行时间
- java 格式化计算时间差
- Cursor JAVA时间格式化处理 sqlite的主键命名 SQLite使用方法
- Java使用DateFormatter格式化日期时间的方法示例
- java中计算时间差值的方法(天数,小时数,分钟数,秒数)
- java 时间计算 格式化的相关记录(后续)