19:时间日期
时间日期
一、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。
第一个构造函数使用当前日期和时间来初始化对象。
Date( )
第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
Date(long date)
Date创建后可以调用以下方法:
| 序号 | 方法和描述 |
|---|---|
| 1 | boolean after(Date date) 若当调用此方法的Date对象在指定日期之后返回true,否则返回false。 |
| 2 | **boolean before(Date date)** 若当调用此方法的Date对象在指定日期之前返回true,否则返回false。 |
| 3 | **Object clone( )** 返回此对象的副本。 |
| 4 | int compareTo(Date date) 比较当调用此方法的Date对象和指定日期。两者相等时候返回0。调用对象在指定日期之前则返回负数。调用对象在指定日期之后则返回正数。 |
| 5 | **int compareTo(Object obj)** 若obj是Date类型则操作等同于compareTo(Date) 。否则它抛出ClassCastException。 |
| 6 | **boolean equals(Object date)** 当调用此方法的Date对象和指定日期相等时候返回true,否则返回false。 |
| 7 | long getTime( ) 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 |
| 8 | int hashCode( ) 返回此对象的哈希码值。 |
| 9 | **void setTime(long time)** 用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。 |
| 10 | **String toString( )** 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。 |
Date的相关操作:
1、获取当前时间
Java中获取当前日期和时间通过使用 Date 对象的 toString() 方法来打印当前日期和时间,如下所示:
public class Demo01 {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date.toString());
}
}
2、使用 SimpleDateFormat 格式化日期
SimpleDateFormat 是一个以语言环境敏感的方式来格式化和分析日期的类。SimpleDateFormat 允许你选择任何用户自定义日期时间格式来运行。代码如下:
public class Demo02 {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse("2009-12-31"); //赋值给date
Date date2 = sdf.parse("2019-01-31");
System.out.println("date1 : " + sdf.format(date1)); //输出
System.out.println("date2 : " + sdf.format(date2));
}
}
3、日期比较
Java使用以下三种方法来比较两个日期:
-
使用 getTime() 方法获取两个日期(自1970年1月1日经历的毫秒数值),然后比较这两个值。代码如下:
public class Demo04 { public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date1 = sdf.parse("2009-12-31"); //赋值给date Date date2 = sdf.parse("2019-01-31"); System.out.println("date1 : " + sdf.format(date1)); //输出 System.out.println("date2 : " + sdf.format(date2)); long long1 = date1.getTime(); long long2 = date2.getTime(); System.out.println(long1 > long2); } } -
使用方法 before(),after() 和 equals()。代码如下:
public class Demo02 { public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date1 = sdf.parse("2009-12-31"); //赋值给date Date date2 = sdf.parse("2019-01-31"); System.out.println("date1 : " + sdf.format(date1)); //输出 System.out.println("date2 : " + sdf.format(date2)); if (date1.after(date2)) { System.out.println("Date1 时间在 Date2 之后"); } if (date1.before(date2)) { System.out.println("Date1 时间在 Date2 之前"); } if (date1.equals(date2)) { System.out.println("Date1 时间与 Date2 相等"); } } } -
使用 compareTo() 方法,它是由 Comparable 接口定义的,Date 类实现了这个接口。
public class Demo03 { public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date1 = sdf.parse("2009-12-31"); //赋值给date Date date2 = sdf.parse("2019-01-31"); System.out.println("date1 : " + sdf.format(date1)); //输出 System.out.println("date2 : " + sdf.format(date2)); if (date1.compareTo(date2) > 0) { System.out.println("Date1 时间在 Date2 之后"); } else if (date1.compareTo(date2) < 0) { System.out.println("Date1 时间在 Date2 之前"); } else if (date1.compareTo(date2) == 0) { System.out.println("Date1 时间与 Date2 相等"); } else { System.out.println("程序怎么会运行到这里?正常应该不会"); } } }
二、Calendar类
Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
- 创建一个代表系统当前日期的Calendar对象
Calendar c = Calendar.getInstance();//默认是当前日期
- 创建一个指定日期的Calendar对象
//创建一个代表2020年6月12日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(20209, 6 - 1, 12);
- Calendar类对象字段类型
常量 |
描述 |
|---|---|
Calendar.YEAR |
年份 |
Calendar.MONTH |
月份 |
Calendar.DATE |
日期 |
Calendar.DAY_OF_MONTH |
日期,和上面的字段意义完全相同 |
Calendar.HOUR |
12小时制的小时 |
Calendar.HOUR_OF_DAY |
24小时制的小时 |
Calendar.MINUTE |
分钟 |
Calendar.SECOND |
秒 |
Calendar.DAY_OF_WEEK |
星期几 |
- Calendar类对象信息的设置
set设置
Calendar c1 = Calendar.getInstance();
调用
~~~java
public final void set(int year,int month,int date)
~~~
c1.set(2009, 6, 12);//把Calendar对象c1的年月日分别设这为:2009、6、12
利用字段类型设置
如果只设定某个字段,例如日期的值,则可以使用如下set方法:
public void set(int field,int value)
把 c1对象代表的日期设置为10号,其它所有的数值会被重新计算
c1.set(Calendar.DATE,10);
把c1对象代表的年份设置为2008年,其他的所有数值会被重新计算
c1.set(Calendar.YEAR,2008);
add设置
alendar c1 = Calendar.getInstance();
把c1对象的日期加上10,也就是c1也就表示为10天后的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, 10);
把c1对象的日期减去10,也就是c1也就表示为10天前的日期,其它所有的数值会被重新计算
c1.add(Calendar.DATE, -10);
例:
public class Demo06 {
public static void main(String[] args) {
//获取当前的日历时间
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_MONTH, -1);
Date da = calendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String accounttime = sdf.format(da);
System.out.println(accounttime);
//设置日期
calendar.set(2011, 11, 11);
// 获取月
// 获取月
int year = calendar.get(Calendar.YEAR);
// 获取月
int month = calendar.get(Calendar.MONTH);
// 获取日
int date = calendar.get(Calendar.DATE);
System.out.println(year + "年" + (month + 1) + "月" + date + "日");
}
}

浙公网安备 33010602011771号