参考Java 1.8
文章目录
- java.util.Date
- methods
- java.util.Calendar
- methods
- Calendar 方法举例
- java.text.SimpleDateFormat
- 符号对应的意思
- 构造方法
- 常用方法
- 举例
java.util.Date
methods
构造方法 | |
public Date() | 以当前时间戳创建 Date 实例 |
public Date(long date) | 以指定时间戳创建 Date 实例,基准为 1970-01-01 00:00:00 |
(其它构造方法已被舍弃,Java 不建议使用) |
其它方法 | ||
public static Date from(Instant instant) | 从 Instant对象获取一个 Date的实例 | |
public boolean before(Date when) | 判断此日期是否在参数日期之前 | |
public boolean after(Date when) | 判断此日期是否在参数日期之后 | |
public int compareTo(Date anotherDate) | 此日期等于参数日期,返回0; 此日期大于参数日期,返回1; 此日期小于参数日期,返回 -1. | |
public boolean equals(Object obj) | 判断两个日期是否相等 | |
public Object clone() | 返回该时间对象的拷贝 | |
public long getTime() | 返回1970-01-01 00:00:00以来,由此 Date对象表示的00:00:00 GMT的毫秒数 | |
public void setTime() | 为该时间对象重新设置 1970-01-01 00:00:00以来的毫秒数 | |
public int hashCode() | 返回该时间对象的哈希码值 | |
public String toString() | 返回该时间对象表示的字符串 | |
(其它方法已被舍弃,Java 不建议使用) |
java.util.Calendar
这个类是 Java 中专门用于操作日期的。
它是一个抽象类,不能直接用 new
直接创建实例对象。但可通过 getInstance()
方法返回一个Calendar
实例。
Calendar calendar = Calendar.getInstance();
在获取到Calendar
实例 calendar 中,当前时间的各种信息都存放于 Calendar
类的类成员变量中:
YEAR | 哪一年 |
MONTH | 哪一月 |
HOUR | 一天中的第几小时 |
DAY_OF_YEAR | 一年中的第几天 |
DAY_OF_MONTH | 一月中的第几天 |
MINUTE | 一个小时中的第几分钟 |
··· (可以在 API 中查看全部) |
通过get(int field)
方法获取到想要获取到相关信息。
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "-" + month + "-" + day +
" 是这一年的第 " + calendar.get(Calendar.DAY_OF_YEAR) + " 天。" );
//输出
//2020-8-17 是这一年的第 261 天。
methods
方法 | |
void add(int field, int amount) | 根据日历的规则,为给定的日历字段添加或减去指定的时间量 |
boolean after(Object when) | 判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果 |
boolean before(Object when) | 判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果 |
void clear() | 将此 Calendar 的所日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义,即将此 Calendar “清空” |
void clear(int field) | 将此 Calendar 的给定日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义 |
Object clone() | 创建并返回此对象的一个副本 |
int compareTo(Calendar anotherCalendar) | 比较两个 Calendar 对象表示的时间值(从历元至现在的毫秒偏移量) |
boolean equals(Object obj) | 将此 Calendar 与指定 Object 比较 |
int get(int field) | 返回给定日历字段的值 |
int getActualMaximum(int field) | 给定此 Calendar 的时间值,返回指定日历字段可能拥有的最大值 |
int getActualMinimum(int field) | 给定此 Calendar 的时间值,返回指定日历字段可能拥有的最小值 |
static Locale[] getAvailableLocales() | 返回所有语言环境的数组,此类的 getInstance 方法可以为其返回本地化的实例 |
String getDisplayName(int field, int style, Locale locale) | 返回给定 style 和 locale 下的日历 field 值的字符串表示形式 |
int getFirstDayOfWeek() | 获取一星期的第一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY |
static Calendar getInstance() | 使用默认时区和语言环境获得一个日历 |
static Calendar getInstance(Locale aLocale) | 使用默认时区和指定语言环境获得一个日历 |
static Calendar getInstance(TimeZone zone) | 使用指定时区和默认语言环境获得一个日历 |
static Calendar getInstance(TimeZone zone, Locale aLocale) | 使用指定时区和语言环境获得一个日历 |
Date getTime() | 返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象 |
long getTimeInMillis() | 返回此 Calendar 的时间值,以毫秒为单位 |
TimeZone getTimeZone() | 获得时区 |
boolean isSet(int field) | 确定给定日历字段是否已经设置了一个值,其中包括因为调用 get 方法触发内部字段计算而导致已经设置该值的情况 |
void roll(int field, boolean up) | 在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段 |
void roll(int field, int amount) | 向指定日历字段添加指定(有符号的)时间量,不更改更大的字段 |
void set(int field, int value) | 将给定的日历字段设置为给定值 |
void set(int year, int month, int date) | 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值 |
void set(int year, int month, int date, int hourOfDay, int minute) | 设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值 |
void set(int year, int month, int date, int hourOfDay, int minute, int second) | 设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值 |
void setTime(Date date) | 使用给定的 Date 设置此 Calendar 的时间 |
void setTimeInMillis(long millis) | 用给定的 long 值设置此 Calendar 的当前时间值 |
void setTimeZone(TimeZone value) | 使用给定的时区值来设置时区 |
String toString() | 返回此日历的字符串表示形式 |
Calendar 方法举例
1、获取 Calendar 实例
Calendar calendar = Calendar.getInstance();
2、使用 get() 方法获取 calendar 中存储的日历内容
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(year + "-" + month + "-" + day +
" 是这一年的第 " + calendar.get(Calendar.DAY_OF_YEAR) + " 天。" );
//输出
//2020-8-17 是这一年的第 261 天。
3、calendar 转换为 Date 对象
java.util.Date date = calendar.getTime();
扩展:Date 对象转化为 Calendar 对象
Date d = new Date(); calendar.setTime(d); //将 Date 对象转换为 Calendar 对象
综合举例:
Calendar 对象作为参数,计算两个时间之间相隔天数
Date 对象作为参数,计算两个时间之间相隔天数
改进精确计算相隔天数的方法
/*
*Calendar 对象作为参数,计算两个时间之间相隔天数
* @param startday 开始时间
* @param endday 结束时间
* @return
*/
public int getIntervalDays(Calendar startday,Calendar endday){
//确保startday在endday之前
if(startday.after(endday)){
Calendar cal=startday;
startday=endday;
endday=cal;
}
//分别得到两个时间的毫秒数
long sl=startday.getTimeInMillis();
long el=endday.getTimeInMillis();
long ei=el-sl;
//根据毫秒数计算间隔天数
return (int)(ei/(1000*60*60*24));
}
/*
* Date对象作为参数,计算两个时间之间相隔天数
* @param startday 开始时间
* @param endday 结束时间
* @return
*/
public int getIntervalDays(Date startday,Date endday){
//确保startday在endday之前
if(startday.after(endday)){
Date cal=startday;
startday=endday;
endday=cal;
}
//分别得到两个时间的毫秒数
long sl=startday.getTime();
long el=endday.getTime();
long ei=el-sl;
//根据毫秒数计算间隔天数
return (int)(ei/(1000*60*60*24));
}
/*
* 同理,可以用相同的方法计算出任意两个时间相隔的小时数,分钟数,秒钟数等
* 注:以上方法是完全按时间计算,有时并不能令人满意,如:
* startday="2006-10-11 20:00:00" endday="2006-10-12 8:00:00"
* 计算结果为0,但是我们也许相让计算结果变为1,此时可以用如下方法实现:
* 在传参之前,先设定endday的时间,如:
* endday.set(Calendar.HOUR_OF_DAY, 23);
* endday.set(Calendar.MINUTE, 59);
* endday.set(Calendar.SECOND, 59);
* endday.set(Calendar.MILLISECOND, 59);
* 这样再传进去startday,endday,则结果就如我们所愿了。不过,如果嫌以上方 法麻烦,可以参考以下方法:
*/
/*
* 改进精确计算相隔天数的方法
*/
public int getDaysBetween (Calendar d1, Calendar d2) {
if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
int y2 = d2.get(Calendar.YEAR);
if (d1.get(Calendar.YEAR) != y2) {
d1 = (Calendar) d1.clone();
do {
days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数
d1.add(Calendar.YEAR, 1);
} while (d1.get(Calendar.YEAR) != y2);
}
return days;
}
java.text.SimpleDateFormat
这个类常被用来格式化和解析日期(java.util.Date)。
符号对应的意思
符号 | 意义 |
yyyy | 年 |
MM | 月 |
dd | 日 |
hh 或 k | 小时,12小时制 |
HH 或 K | 小时,24小时制 |
mm | 分 |
ss | 秒 |
S | 毫秒 |
E | 星期几 |
D | 一年中的第几天 |
F | 一月中的第几个星期(会把这个月总共过的天数除以7) |
w | 一年中的第几个星期 |
W | 一月中的第几星期(会根据实际情况来算) |
a | 上下午标识 |
z | 时区 |
构造方法
public SimpleDateFormat() | 使用默认模式和日期格式符号构造 SimpleDateFormat |
public SimpleDateFormat(String pattern) | 使用自定义的时间模式构造 SimpleDateFormat |
常用方法
方法 | 说明 |
public String format(java.util.Date date) | 返回以 date 的时间为根据自定义时间模式的字符串 |
public java.util.Date parse(String source) | source的时间格式与设定的模式相匹配,返回 Date 对象 |
举例
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
System.out.println(s.format(new Date()));
Date d = s.parse("2020-10-10 12:12:12");
System.out.println(d.toString());
//输出
//2020-09-18 05:00:47
//Sat Oct 10 00:12:12 CST 2020
参考了网上一些博文和 jdk 1.8 的 api。