java基础知识--日期时间类
继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象。
-
public Date()
:分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。 -
public Date(long date)
:分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
==》ps: 由于我们处于东八区,所以我们的基准时间为1970年1月1日8时0分0秒。
import java.util.Date; public class DemoDate { public static void main(String[] args) { // 创建日期对象,获取当前的时间 System.out.println(new Date()); // Tue Jan 16 18:18:18 CST 2020 // 创建日期对象,把当前的毫秒值转成日期对象 System.out.println(new Date(0L)); // Thu Jan 01 08:00:00 CST 1970 } }
常用方法: public boolean after(Date when) 测试此日期是否在指定日期之后。
public boolean before(Date when) 测试此日期是否在指定日期之前。
public int compareTo(Date anotherDate) 比较两个日期的顺序。
public Object clone() 返回此对象的副本。
public boolean equals(Object obj) 比较两个日期的相等性。
public int hashCode() 返回此对象的哈希码值。
public String toString() 把此 Date
对象转换为dow mon dd hh:mm:ss zzz yyyy形式的 String
(Date类对Object类中的toString方法进行了覆盖重写,所以结果为指定格式的字符串。)
public long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
public void setTime(long time) 设置此 Date
对象,以表示 1970 年 1 月 1 日 00:00:00 GMT 以后 time
毫秒的时间点。
java.text.DateFormat
是日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以完成在Date对象与String对象之间进行来回转换。
-
格式化:按照指定的格式,从Date对象转换为String对象。
-
解析:按照指定的格式,从String对象转换为Date对象。
构造方法
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat
。这个类需要一个模式(格式)来指定格式化或解析的标准。
构造方法为:
-
public SimpleDateFormat(String pattern)
:用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。
参数pattern是一个字符串,代表日期时间的自定义格式。如:"yyyy-MM-dd HH:mm:ss"
DateFormat类的常用方法有:
-
public String format(Date date)
:将Date对象格式化为字符串。
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; /* 把Date对象转换成String */ public class DateFormatToStrMethod { public static void main(String[] args) { Date date = new Date(); // 创建日期格式化对象,在获取格式化对象时可以指定风格 DateFormat df = new SimpleDateFormat("yyyy年MM月dd日"); String str = df.format(date); System.out.println(str); // 2020年08月09日 } }
-
public Date parse(String source)
:将字符串解析为Date对象。
import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /* 把String转换成Date对象 */ public class StrToDateFormatMethod { public static void main(String[] args) throws ParseException { DateFormat df = new SimpleDateFormat("yyyy年MM月dd日"); String str = "2019年12月11日"; Date date = df.parse(str); System.out.println(date); // Tue Dec 11 00:00:00 CST 2019 } }
java.util.Calendar
是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。
获取方式
import java.util.Calendar; public class DemoCalendarInit { public static void main(String[] args) {
// 获取日历对象 Calendar cal = Calendar.getInstance(); } }
Calendar静态方法
-
public static Calendar getInstance()
:使用默认时区和语言环境获得一个日历
常用方法
根据Calendar类的API文档,常用方法有:
-
public int get(int field)
:返回给定日历字段的值。
import java.util.Calendar; public class CalendarUtil { public static void main(String[] args) { // 创建Calendar对象 Calendar cal = Calendar.getInstance(); // 设置年 int year = cal.get(Calendar.YEAR); // 设置月 int month = cal.get(Calendar.MONTH) + 1; // 设置日 int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH); System.out.print(year + "年" + month + "月" + dayOfMonth + "日"); } }
-
public void set(int field, int value)
:设置给定日历字段的值。
import java.util.Calendar; public class DemoSetCalendarMethod { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 2020); System.out.print(year + "年" + month + "月" + dayOfMonth + "日"); // 2020年1月17日 } }
-
public abstract void add(int field, int amount)
:根据日历的规则,为给定的日历字段添加或减去指定的时间量。
(如果第二个参数为正数则加上偏移量,如果为负数则减去偏移量。)
import java.util.Calendar; public class DemoAddCalendarMethod { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); System.out.print(year + "年" + month + "月" + dayOfMonth + "日"); // 2018年1月17日 // 使用add方法 cal.add(Calendar.DAY_OF_MONTH, 2); // 加2天 cal.add(Calendar.YEAR, -3); // 减3年 System.out.print(year + "年" + month + "月" + dayOfMonth + "日"); // 2015年1月18日; } }
-
public Date getTime()
:返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。(ps:并不是获取毫秒时刻)
import java.util.Calendar; import java.util.Date; public class DemoTimeCalendarMethod { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); Date date = cal.getTime(); System.out.println(date); // Tue Jan 16 16:03:09 CST 2020 } }
Calendar类中提供很多成员常量,代表给定的日历字段:
含义 | |
---|---|
YEAR | 年 |
MONTH | 月(从0开始,可以+1使用) |
DAY_OF_MONTH | 月中的天(几号) |
HOUR | 时(12小时制) |
HOUR_OF_DAY | 时(24小时制) |
MINUTE | 分 |
SECOND | 秒 |
DAY_OF_WEEK |
java.lang.System
类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。
在System类的API文档中,常用的方法有:
-
public static long currentTimeMillis()
:返回以毫秒为单位的当前时间。
public class SystemDemo { public static void main(String[] args) { long start = System.currentTimeMillis(); for (int i = 0; i < 10000; i++) { System.out.println(i); } long end = System.currentTimeMillis(); System.out.println("共耗时毫秒:" + (end - start)); } }
-
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
public class SystemArrayCopyDemo { public static void main(String[] args) { int[] src = new int[]{1,2,3,4,5}; int[] dest = new int[]{6,7,8,9,10}; System.arraycopy( src, 0, dest, 0, 3); /*代码运行后:两个数组中的元素发生了变化 src数组元素[1,2,3,4,5] dest数组元素[1,2,3,9,10] */ } }
参数名称 | 参数类型 | 参数含义 | |
---|---|---|---|
1 | src | Object | 源数组 |
2 | srcPos | int | 源数组索引起始位置 |
3 | dest | Object | 目标数组 |
4 | destPos | int | 目标数组索引起始位置 |
5 | length | int |
西方星期的开始为周日,中国为周一。
在Calendar类中,月份的表示是以0-11代表1-12月。