一、 java.util.Date类
1、创建当前时间Date对象
//创建一个代表系统当前日期时间的Date对象
Date date = new Date();
2、创建指定日期、时间的Date对象
因为Date类的时间是以1900开始的,月份从0开始的。所以再new Date对象时,设置的年份应该为指定年份-1900,月份应该为指定月份-1。
//创建一个代表2020年4月21号的Date对象,该方法已过时
Date date = new Date(120, 3, 21);
3、获取Date对象包含的日期时间信息
Date date = new Date(120, 3, 21);
//下列方法都已过时
//获得年份 (注意年份要加上1900,这样才是正确的年份)
int year = date.getYear() + 1900;
//获得月份 (注意月份要加1,这样才是正确的月份)
int month = date.getMonth() + 1;
//获得日期
int day = date.getDate();
//获得小时
int hour = date.getHours();//不设置默认为0
//获得分钟
int minute = date.getMinutes();
//获得秒
int second = date.getSeconds();
//获得星期 (星期是从0开始的,0为星期日,一为星期一)
int week = date.getDay();
二、java.util.Calendar类
1、创建当前时间的Calendar对象
Calendar c = Calendar.getInstance();//默认是当前日期
2、创建指定日期、时间的Calendar对象
//创建一个代表2020年4月21日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2020, 3, 21);//调用:public final void set(int year,int month,int date)
3、手动设置日期、时间信息
使用set方法设置对应的日期时间信息。
//设置信息时,其它所有的数值会被重新计算
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR,2020);//2020年
cal.set(Calendar.MONTH,8);//9月
cal.set(Calendar.DAY_OF_MONTH,27);//27号
cal.set(Calendar.HOUR_OF_DAY,9);//小时
cal.set(Calendar.MINUTE,27);//分钟
cal.set(Calendar.SECOND,59);//秒
Calendar常用常量
Calendar.YEAR——年份
Calendar.MONTH——月份,从0开始,0-11
Calendar.DATE——日期
Calendar.DAY_OF_MONTH——本月的日期,和DATE相同
Calendar.HOUR——12小时制的小时
Calendar.HOUR_OF_DAY——24小时制的小时
Calendar.MINUTE——分钟
Calendar.SECOND——秒
Calendar.DAY_OF_WEEK——星期几,从星期日开始,1-7,1代表星期日,2代表星期一,和Date有点差别
使用add方法进行日期时间计算。(其它所有的数值会被重新计算)
Calendar c1 = Calendar.getInstance();
//把c1对象的日期加上10,其它所有的数值会被重新计算,例如4月21号加上10就会变成5月1号,
//add方法在执行时会重新计算其他值
c1.add(Calendar.DATE, 10);
//把c1对象的日期加上-10,其它所有的数值会被重新计算
c1.add(Calendar.DATE, -10);
使用roll方法进行日期时间计算。(只会处理计算的字段,其他字段的逻辑不会改变)
Calendar calendar = Calendar.getInstance();
calendar.set(2020, 0, 1);//代表2020年1月1日
calendar.roll(Calendar.MONTH, -1);//这样就将日期设置成了2020年12月1日。
4、获取Calendar对象的日期时间信息
使用get方法获取Calendar对象的日期时间信息
Calendar c1 = Calendar.getInstance();
int year = c1.get(Calendar.YEAR); //年
int month = c1.get(Calendar.MONTH) + 1; //月(MONTH+1)
int date = c1.get(Calendar.DATE); //日
int hour = c1.get(Calendar.HOUR_OF_DAY); //时
int minute = c1.get(Calendar.MINUTE); //分
int second = c1.get(Calendar.SECOND); //秒
int week= c1.get(Calendar.DAY_OF_WEEK); //星期几 从星期日开始,1-7,1代表星期日,2代表星期一,和Date有点差别
5、Calendar类属性和方法
类型或返回值 | 详细信息 |
---|---|
static int | ALL_STYLES getDisplayNames的样式说明符, 表示所有样式的名称,如“1月”和“1月”。 |
static int | AM AM_PM字段的值表示从午夜到中午之前的一天中的一段时间。 |
static int | AM_PM 对于现场数 get和 set指示是否 HOUR是前或中午之后。 |
static int | APRIL MONTH字段的价值 指示了格里高利和朱利安日历中的第四个月。 |
protected boolean | areFieldsSet 如果 fields[]与当前设置的时间同步,则为真。 |
static int | AUGUST MONTH领域的价值 指示了公历和朱利安日历中的第八个月。 |
static int | DATE get和 set字段编号表示该月的日期。 |
static int | DAY_OF_MONTH get字段编号和 set本月的日期。 |
static int | DAY_OF_WEEK get字段编号和 set表示一周中的日期。 |
static int | DAY_OF_WEEK_IN_MONTH get字段编号和 set当月的 set几的序号。 |
static int | DAY_OF_YEAR get和 set字段编号, set本年度的日数。 |
static int | DECEMBER MONTH字段的值表示公历和朱利安日历中的第十二个月。 |
static int | DST_OFFSET get和 set字段编号 get夏令时偏移量(以毫秒为单位)。 |
static int | ERA get和 set字段号表示时代,例如在儒略历中的AD或BC。 |
static int | FEBRUARY MONTH字段的价值表示今年第二个月在公历和朱利安日历。 |
static int | FIELD_COUNT get和 set的不同字段的数量。 |
protected int[] | fields 该日历的当前设置时间的日历字段值。 |
static int | FRIDAY DAY_OF_WEEK字段的值表示周五。 |
static int | HOUR get和 set字段编号, get上午或下午的小时。 |
static int | HOUR_OF_DAY get字段编号和 set当天的小时数。 |
protected boolean[] | isSet 说明是否设置日历的指定日历字段的标志。 |
protected boolean | isTimeSet 如果那么那么 time的值是有效的。 |
static int | JANUARY MONTH字段的价值表示今年首次在公历和朱利安日历。 |
static int | JULY MONTH字段的值代表了 公历和朱利安日历中的第七个月。 |
static int | JUNE MONTH字段的价值 指示了公历和朱利安日历中的第六个月。 |
static int | LONG getDisplayName和 getDisplayNames相当于 LONG_FORMAT的样式说明 符 。 |
static int | LONG_FORMAT getDisplayName和 getDisplayNames的样式说明 符 , 表示用于格式的长名称。 |
static int | LONG_STANDALONE 一个 getDisplayName和 getDisplayNames的样式说明 符 , 表示一个独立使用的长名称,例如月份名称作为日历头。 |
static int | MARCH MONTH字段的值代表了 公历和朱利安日历中的第三个月。 |
static int | MAY MONTH领域的价值 指示了公历和朱利安日历中的第五个月。 |
static int | MILLISECOND get和 set字段号表示 get内的 set数。 |
static int | MINUTE get和 set字段编号表示小时内的分钟。 |
static int | MONDAY DAY_OF_WEEK字段的值表示星期一。 |
static int | MONTH get和 set字段号表示月份。 |
static int | NARROW_FORMAT getDisplayName和 getDisplayNames的样式说明 符 , 表示用于格式的窄名称。 |
static int | NARROW_STANDALONE getDisplayName和 getDisplayNames的样式说明 符 独立地表示一个狭义的名称。 |
static int | NOVEMBER MONTH领域的价值 指示了公历和朱利安日历中的第十一个月。 |
static int | OCTOBER MONTH字段的价值表示在公历和朱利安日历中的一年中的第十个月。 |
static int | PM AM_PM字段的值表示从中午到午夜之前的一天中的一段时间。 |
static int | SATURDAY DAY_OF_WEEK字段的值表示星期六。 |
static int | SECOND get和 set字段编号表示分钟内的第二个。 |
static int | SEPTEMBER MONTH字段的值代表了 公历和朱利安日历中的第九个月。 |
static int | SHORT getDisplayName和 getDisplayNames的样式说明 符 , 相当于 SHORT_FORMAT 。 |
static int | SHORT_FORMAT getDisplayName和 getDisplayNames的样式说明 符 , 表示用于格式的短名称。 |
static int | SHORT_STANDALONE 一个用于 getDisplayName和 getDisplayNames的样式说明 符 , 表示一个简单的名称,例如一个月缩写作为日历头。 |
static int | SUNDAY DAY_OF_WEEK字段的值表示星期天。 |
static int | THURSDAY DAY_OF_WEEK字段的值表示星期四。 |
protected | long time 这个日历的当前设定时间,以1970年1月1日,格林尼治标准时间0:00:00之后的毫秒表示。 |
static int | TUESDAY DAY_OF_WEEK字段的值表示周二。 |
static int | UNDECIMBER MONTH字段的值表示一年的第十三个月。 |
static int | WEDNESDAY DAY_OF_WEEK字段的值表示周三。 |
static int | WEEK_OF_MONTH get和 set字段编号, set当月的周数。 |
static int | WEEK_OF_YEAR get和 set字段编号, set本年度的周数。 |
static int | YEAR get现场编号和 set表示年份。 |
static int | ZONE_OFFSET get和 set字段编号, get GMT以毫秒为 get的原始偏移量。 |
三、java.util.GregorianCalendar类
GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家使用的标准日历系统。
GregorianCalendar类对象的创建
//在具有默认语言环境的默认时区内使用当前时间构造一个默认的 GregorianCalendar
GregorianCalendar currentDate = new GregorianCalendar();
//或者使用指定日期时间的构造方法
GregorianCalendar(int year, int month, int dayOfMonth)
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) 。
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)
注:GregorianCalendar有一个方法:boolean isLeapYear(int year) 确定给定的年份是否为闰年
四、日期格式化SimpleDateFormat类
SimpleDateFormat类用来将日期转换为特定格式的日期字符串以及将特定格式的日期字符串转换为Date类型。
1、使用format() 方法将日期类型转换为指定格式的字符串
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
String str = dateFormat.format(date);
System.out.println(str);
2、使用parse()方法将字符串转换为Date类型
try{
String str="2019-1-21";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date date= sdf.parse(str);
System.out.println(date);
}catch (Exception e){
e.printStackTrace();
}
注:new SimpleDateFormat 对象时可以设置语言环境:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINESE);
SimpleDateFormat 自定义格式中常用的字母及含义
字母 | 含义 | 示例 |
---|---|---|
y | 年份。一般用 yy 表示两位年份,yyyy 表示 4 位年份 | 使用 yy 表示的年扮,如 11;使用 yyyy 表示的年份,如 2011 |
M | 月份。一般用 MM 表示月份,如果使用 MMM,则会根据语言环境显示不同语言的月份 | 使用 MM 表示的月份,如 05;使用 MMM 表示月份,在 Locale.CHINA语言环境下,如“十月”;在 Locale.US语言环境下,如 Oct |
d | 月份中的天数。一般用 dd 表示天数 | 使用 dd 表示的天数,如 10 |
D | 年份中的天数。表示当天是当年的第几天, 用 D 表示 | 使用 D 表示的年份中的天数,如 295 |
E | 星期几。用 E 表示,会根据语言环境的不同, 显示不同语言的星期几 | 使用 E 表示星期几,在 Locale.CHINA 语言环境下,如“星期四”;在 Locale.US 语言环境下,如 Thu |
H | 一天中的小时数(0~23)。一般用 HH 表示小时数 使用 HH 表示的小时数,如 18 | |
h | 一天中的小时数(1~12)。一般使用 hh 表示小时数 | 使用 hh 表示的小时数,如 10 (注意 10 有可能是 10 点,也可能是 22 点) |
m | 分钟数。一般使用 mm 表示分钟数 | 使用 mm 表示的分钟数,如 29 |
s | 秒数。一般使用 ss 表示秒数 | 使用 ss 表示的秒数,如 38 |
S | 毫秒数。 | 一般使用 SSS 表示毫秒数 使用 SSS 表示的毫秒数,如 156 |
五、时间类和字符串转换
Calendar 转化 String
Calendar calendar= Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = sdf.format(calendar.getTime());
String 转化Calendar
String str="2019-1-21";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date date =sdf.parse(str);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Date 转化String
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
String dateStr=sdf.format(new Date());
String 转化Date
String str="2019-1-21";
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
Date date= sdf.parse(str);
Date 转化Calendar
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
Calendar转化Date
Calendar calendar = Calendar.getInstance();
Date date =calendar.getTime();
参考:
https://www.cnblogs.com/gu-bin/p/10022703.html
https://www.jianshu.com/p/bb08da5fece4