java calendar与date_Java日期类:Date和Calendar的使用

总是使用这两个类,总是需要百度。还不如一次全部整理完。

一、介绍:

Date 类

Date 表示特定的瞬间,精确到毫秒。

在 JDK 1.1 之前,类 Date 有两个其他的函数。它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串。不过,这些函数的 API 不易于实现国际化。从 JDK 1.1 开始,应使用 Calendar 类实现日期和时间字段之间转换,使用 DateFormat 类来格式化和解析日期字符串。Date 中的相应方法已废弃(查阅自 API 文档)

Calendar 类

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

简单说就是:java.util.Date 是个日期数据;java.util.Calendar 用于日期相关的计算;

二、使用:

2.1 如何实例化当前时间?

Date date = newDate();

Calendar calendar=Calendar.getInstance();

System.out.println(date.toString());//输出:Thu Oct 18 13:46:43 CST 2018

System.out.println(calendar.toString());//输出:java.util.GregorianCalendar[time=1539841603042,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2018,MONTH=9,WEEK_OF_YEAR=42,WEEK_OF_MONTH=3,DAY_OF_MONTH=18,DAY_OF_YEAR=291,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=46,SECOND=43,MILLISECOND=42,ZONE_OFFSET=28800000,DST_OFFSET=0]

根据输出,我们也可以看出Date和Calendar的区别。

2.2 如何实例化特定时间?

1 //注:mm:ss必须小写,否则无法转换。HH大小写无影响。

2 DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");3 Date date1 = null;4 try{5 date1 = df.parse("2017-08-07 11:11:11");6 } catch(ParseException e) {7 e.printStackTrace();8 }9

10 Calendar calendar1 =Calendar.getInstance();11 calendar1.setTime(date1);

实例化时注意:

建议从Date使用格式转换,然后赋值(setTime)给Calendar,不然直接设置Calendar用毫秒数(setTimeInMillis)太麻烦。(其实不知道怎么设置....)

另外,实例化时的格式:yyyy-MM-dd hh:mm:ss。mm:ss必须小写,否则无法转换。HH大小写无影响。

2.3 Date和Calendar如何互相转化?

Date date1 = newDate();

Calendar calendar1=Calendar.getInstance();

calendar1.setTime(date1);

Date date= calendar1.getTime();

Calendar类有两个方法:setTime和getTime。

setTime接收一个Date类型的参数;

getTime返回一个Date类型的结果;

主要是通过这个方式实现互相转换。Date类好像没有相关转换的方法

2.4 如何格式化时间?

DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

String s= df.format(new Date());

使用DateFormat类,进行format。

2.5 如何对日期进行操作。即日期加减:年月日以及小时分秒等。

DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

Date date1= newDate();//输出:2018-10-18 02:18:27

System.out.println(df.format(date1));

Calendar calendar1=Calendar.getInstance();

calendar1.setTime(date1);

calendar1.add(Calendar.MONTH,1);

Date date=calendar1.getTime();//输出:2018-11-18 02:18:27

System.out.println(df.format(date));

使用Calendar的add方法:下面是官方接口定义:

abstract voidadd(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量。

field表示时间量:可以为如下:

Calendar.ERA:表示无加减;

Calendar.YEAR:年

Calendar.MONTH:月

Calendar.DATE:日

Calendar.HOUR:小时

Calendar.MINUTE:分钟

Calendar.SECOND:秒

注意:Calendar中的所有常量都可以为参数,不一定局限于上面的。比如Calendar.HOUR_OF_DAY,Calendar.WEEK_OF_MONTH等。不管是什么,只要这个值和周相关就是周(月中的第几周,年中的第几周等),和日相关就是日(一年当中的第几天,一月当中的第几天,一周当中的第几天),和小时相关就是小时

amount:为整数表示当前时间的基础上加上对应的时间量;为负数表示当前时间的基础上减去对应的时间量。

2.6 其他常用方法

2.6.1 获取当天结束时间:59分59秒0毫秒

privateDate getDayEnd() {

Calendar cal= newGregorianCalendar();

cal.set(Calendar.HOUR_OF_DAY,23);

cal.set(Calendar.MINUTE,59);

cal.set(Calendar.SECOND,59);

cal.set(Calendar.MILLISECOND,0);returncal.getTime();

}

2.6.2 日期工具类(DateUtils.java)

packagecom.dmall.virtual.domain.utils;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importjava.text.DateFormat;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;public classDateUtils {public static final String MMddHHmmss = "MM-dd HH:mm:ss";public static final String yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss";public static final String yyyy_MM_dd = "yyyy-MM-dd";public static final String yyyyMMdd = "yyyy.MM.dd";public static final String HHmm = "HH:mm";public static final String MM_dd = "MM-dd";public static final String yyyy_MM_dd_other = "yyyy-MM-dd";private static final Logger logger = LoggerFactory.getLogger(DateUtils.class);/*** 根据基础时间(base),单位(unit),偏移量(differ)对时间进行偏移并返回偏移后的时间

*@parambase

*@paramforward

*@paramunit

*@paramdiffer

*@return

*/

public static Date shiftDate(Date base, boolean forward, DateUnit unit, intdiffer){if(base == null){return null;

}if(differ <= 0){returnbase;

}

Calendar c=Calendar.getInstance();

c.setTime(base);

c.set(unit.getUnit(), c.get(unit.getUnit())+(forward ? differ : -differ));returnc.getTime();

}public enumDateUnit{

YEAR(Calendar.YEAR),

MONTH(Calendar.MONTH),

WEEK(Calendar.MONTH),

DAY(Calendar.DAY_OF_YEAR),

HOUR(Calendar.HOUR_OF_DAY),

MINUE(Calendar.MINUTE),

SECOND(Calendar.SECOND);private intunit;private DateUnit(intunit){this.unit =unit;

}public intgetUnit() {returnunit;

}public void setUnit(intunit) {this.unit =unit;

}

}/*** 日期格式化为字符串

*@paramdate

*@paramformat

*@return

*/

public staticString formatDate(Date date, String format) {if (date == null) {return null;

}try{

SimpleDateFormat sdf= newSimpleDateFormat(format);returnsdf.format(date);

}catch(Exception e){

logger.error("日期格式化失败,date={}", date,e);return null;

}

}/*** 字符串格式化为日期

*@paramdateStr

*@paramformat

*@return

*/

public staticDate parseDate(String dateStr, String format){

DateFormat formatter= newSimpleDateFormat(format);if(StringUtils.isBlank(dateStr)){return null;

}try{returnformatter.parse(dateStr.trim());

}catch(ParseException e) {

logger.warn("ParseException日期异常1,参数dateStr={},format={}",newObject[]{dateStr,format,e});return null;

}catch(Exception e) {

logger.warn("ParseException日期异常2,参数dateStr={},format={}",newObject[]{dateStr,format,e});return null;

}

}/*** 获取当天指定时间(时-分-秒)的日期

*@paramhours

*@return

*/

public static Date getSpecialHms(Date date, int hours, int minutes, intseconds) {if(date == null){return null;

}

Calendar cal=Calendar.getInstance();

cal.setTime(date);

cal.set(Calendar.HOUR_OF_DAY, hours);

cal.set(Calendar.MINUTE, minutes);

cal.set(Calendar.SECOND, seconds);

cal.set(Calendar.MILLISECOND,0);returncal.getTime();

}/*** 获取指定日期的小时

*@return

*/

public static intgetCurrentHours(Date date){

Calendar calendar=Calendar.getInstance();

calendar.setTime(date);returncalendar.get(Calendar.HOUR_OF_DAY);

}public static voidmain(String[] args) {

}

}

三、结束:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值