赞
踩
java.util.Date类表示特定的瞬间,精确到毫秒。Date类的构造函数可以把毫秒值转成日期对象。
继续查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,我们重点看以下两个构造函数
public Date()
:从运行程序的此时此刻到时间原点经历的毫秒值,转换成Date对象,分配Date对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
public Date(long date)
:将指定参数的毫秒值date,转换成Date对象,分配Date对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即1970年1月1日00:00:00 GMT)以来的指定毫秒数。
tips: 由于中国处于东八区(GMT+08:00)是比世界协调时间/格林尼治时间(GMT)快8小时的时区,当格林尼治标准时间为0:00时,东八区的标准时间为08:00。
利用空参构造可以自动设置当前系统时间的毫秒时刻
- //1.创建对象表示一个时间
- Date d1=new Date();
- System.out.println(d1);
利用有参构造指定long类型的构造参数,可以自定义毫秒时刻。例如:
- //2.创建对象表示一个指定的时间
- Date d2=new Date(0L);
- System.out.println(d2);
利用setTime修改时间
public void setTime(long time)
把方法参数给定的毫秒值设置给日期对象
- //3.setTime修改时间
- //1000毫秒=1s
- d2.setTime(1000L);
- System.out.println(d2);
利用getTime获取时间
public long getTime()
把日期对象转换成对应的时间毫秒值。
- //利用gettime获取时间
- long time = d2.getTime();
- System.out.println(time);
tips:在使用println方法时,会自动调用Date类中的toString方法。Date类对Object类中的toString方法进行了覆盖重写,所以结果为指定格式的字符串,也就是打印的是属性值。
- public class timedemo2 {
- public static void main(String[] args) {
- //需求: 打印时间原点开始一年之后的时间
- Date d1 = new Date(0L);
- //获取d1时间的毫秒值
- long time = d1.getTime();
- //在这个基础上我们要加一年的毫秒值
- time+=1000L*60*60*24*365;
- //把计算之后的时间毫秒值再设置回d1当中
- d1.setTime(time);
- System.out.println(d1);
- }
- }
- //需求2:定义2个任意的Date对象,比较一个哪个时间在前
- Date d1 = new Date(Math.abs(r.nextInt()));
- Date d2 = new Date(Math.abs(r.nextInt()));
- long time1 = d1.getTime();
- long time2 = d2.getTime();
- if (time1 > time2) {
- System.out.println("第一个时间在后面,第二个时间在前面");
- } else if (time1<time2) {
- System.out.println("第一个时间在前面,第二个时间在后面");
-
- }else{
- System.out.println("二个时间一样");
- }
-
- }
java.text.SimpleDateFormat
是日期/时间格式化类,我们通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。
格式化:按照指定的格式,把Date对象转换为String对象。
解析:按照指定的格式,把String对象转换为Date对象。
由于DateFormat为抽象类,不能直接使用,所以需要常用的子类java.text.SimpleDateFormat
。这个类需要一个模式(格式)来指定格式化或解析的标准。构造方法为:
public SimpleDateFormat(String pattern)
:用给定的模式和默认语言环境的日期格式符号构造SimpleDateFormat。参数pattern是一个字符串,代表日期时间的自定义格式。
常用的格式规则为:
format方法
使用format方法的代码为:
- import java.text.DateFormat;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- /*
- 把Date对象转换成String
- */
- public class Demo03DateFormatMethod {
- 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年09月19日
- }
- }
parse方法
使用parse方法的代码为:
- import java.text.DateFormat;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- /*
- 把String转换成Date对象
- */
- public class Demo04DateFormatMethod {
- public static void main(String[] args) throws ParseException {
- DateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
- String str = "2018年12月11日";
- Date date = df.parse(str);
- System.out.println(date); // Tue Dec 11 00:00:00 CST 2018
- }
- }
- package SimpleDateFormat;
-
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
-
- public class SimpleDateFormatdemo1 {
- /*
- public simpleDateFormat() 默认格式
- public simpleDateFormat(String pattern) 指定格式
- public final string format(Date date) 格式化(日期对象 ->字符串)
- public Date parse(string source) 解析(字符串 ->日期对象)
- */
- public static void main(String[] args) throws ParseException {
- //method01();
- // method2();
- //1.定义一个字符串表示时间
- String str = "2023-11-11 11:11:11";
- //2.利用空参构造创建simpleDateFormat对象
- // 细节:
- //创建对象的格式要跟字符串的格式完全一致
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ");
- Date date = sdf.parse(str);
- //3.打印结果
- System.out.println(date);
-
-
-
- }
-
- private static void method2() {
-
- Date d2 = new Date();
- //2.利用带参构造创建simpleDateFormat对象,指定格式
- SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss EE");
- System.out.println(sdf2.format(d2));
- }
-
- private static void method01() {
- //1.利用空参构造创建simpleDateFormat对象,默认格式
- SimpleDateFormat sdf = new SimpleDateFormat();
- Date d1 = new Date();//当前系统时间
- System.out.println(sdf.format(d1));//打印格式化(日期对象 ->字符串)
- //2024/7/4 下午5:19
- }
-
- }
- package SimpleDateFormat;
-
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
-
- public class SimpleDateFormatdemo2 {
- /*
- public simpleDateFormat() 默认格式
- public simpleDateFormat(String pattern) 指定格式
- public final string format(Date date) 格式化(日期对象 ->字符串)
- public Date parse(string source) 解析(字符串 ->日期对象)
- */
- public static void main(String[] args) throws ParseException {
- //1.定义一个字符串表示时间
- String str="2000-11-11";
- //2.利用空参构造创建simpleDateFormat对象
- // 细节:
- //创建对象的格式要跟字符串的格式完全一致
- SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");
- Date date = sdf1.parse(str);
-
- //利用带参构造创建simpleDateFormat对象,指定格式
- SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");
- System.out.println(sdf2.format(date));
- }
- }
- package SimpleDateFormat;
- /* 需求:
- 秒杀活动开始时间:2023年11月11日 0:0:0(毫秒值)
- 秒杀活动结束时间:2023年11月11日 0:10:0(毫秒值)
- 小贾下单并付款的时间为:2023年11月11日 0:01:0
- 小皮下单并付款的时间为:2023年11月11日 0:11:0
- 用代码说明这两位同学有没有参加上秒杀活动?
- */
-
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
-
- public class SimpleDateFormatdemo3 {
- public static void main(String[] args) throws ParseException {
- //1.定义字符串表示三个时间
- String startstr = "2023年11月11日 0:0:0";//600000毫秒=600s
- String endtstr = "2023年11月11日 0:10:0";
- String ordertstr = "2023年11月11日 0:01:0";//6s
- //2.解析上面的三个时间,得到Date对象
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
- Date startdate = sdf.parse(startstr);
- Date enddate = sdf.parse(endtstr);
- Date orderdate = sdf.parse(ordertstr);
- //3.获取3个毫秒差
- long starttime = startdate.getTime();
- long endtime = enddate.getTime();
- long ordertime = orderdate.getTime();
- if (ordertime >=starttime&& ordertime <=endtime) {
- System.out.println("参加活动成功");
- }else {
- System.out.println("参加活动失败");
- }
-
-
- }
- }
3.1 概念
java.util.Calendar是日历类,在Date后出现,替换掉了许多Date的方法。该类将所有可能用到的时间信息封装为静态成员变量,方便获取。日历类就是方便获取各个时间属性的。
3.2 获取方式
Calendar为抽象类,由于语言敏感性,Calendar类在创建对象时并非直接创建,而是通过静态方法创建,返回子类对象,如下:
Calendar静态方法
public static Calendar getInstance():使用默认时区和语言环境获得一个日历
- import java.util.Calendar;
-
- public class Demo06CalendarInit {
- public static void main(String[] args) {
- Calendar cal = Calendar.getInstance();
- }
- }
3.3 常用方法
根据Calendar类的API文档,常用方法有:
public int get(int field):返回给定日历字段的值。
public void set(int field, int value):将给定的日历字段设置为给定值。
public abstract void add(int field, int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对象。
Calendar类中提供很多成员常量,代表给定的日历字段:
//1.获取日历对象 //细节1:Calendar是一个抽象类,不能直接new,而是通过一个静态方法获取到子类对象 //底层原理: //会根据系统的不同时区来获取不同的日历对象,默认表示当前时间。 //把会把时间中的纪元,年,月,日,时,分,秒,星期,等等的都放到一个数组当中 // 0 :纪元 // 1 :年 // 2 :月 // 3 : 一年中的第几周 // 4:一个月中的第几周 // 5: 一个月中的第几天(日期) // .... //细节2: //月份:范围0~11 如果获取出来的是.那么实际上是1月。 //星期:在老外的眼里,星期日是一周中的第一天 // 1(星期日) 2(星期一) 3(星期二) 4(星期三) 5(星期四) 6(星期五) 7(星期六)
get方法用来获取指定字段的值,set方法用来设置指定字段的值,代码使用演示:
- import java.util.Calendar;
- public class Demo {
- 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 + "日");
- }
- }
- package Calendar;
-
- import java.util.Calendar;
-
- public class CalendarDemo3 {
- public static void main(String[] args) {
- Calendar cal=Calendar.getInstance();
- //设置年
- cal.set(Calendar.YEAR,2034);
- //获取年
- 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 + "日");
- }
- }
add方法可以对指定日历字段的值进行加减操作,如果第二个参数为正数则加上偏移量,如果为负数则减去偏移量。代码如:
- package Calendar;
- import java.util.Calendar;
- public class CalendarDemo4 {
- public static void main(String[] args) {
- 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.println(year + "年" + month + "月" + dayOfMonth + "日");
- // 使用add方法
- cal.add(Calendar.DAY_OF_MONTH, 2); // 加2天
- cal.add(Calendar.YEAR, -3); // 减3年
- // 获取年
- year = cal.get(Calendar.YEAR);
- // 获取月
- month = cal.get(Calendar.MONTH) + 1;
- // 获取日
- dayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
- System.out.println(year + "年" + month + "月" + dayOfMonth + "日");
- }
- }
Calendar中的getTime方法并不是获取毫秒时刻,而是拿到对应的Date对象。
- import java.util.Calendar;
- import java.util.Date;
-
- public class Demo {
- public static void main(String[] args) {
- Calendar cal = Calendar.getInstance();
- Date date = cal.getTime();
- System.out.println(date);
- }
- }
综合
- package Calendar;
-
- import java.util.Calendar;
- import java.util.Date;
-
- import static Calendar.CalendarDemo1.getWeek;
-
- /*
- public static Calendar lgetInstance() 获取当前时间的日历对象
- public final Date getTime() 获取日期对象
- public final setTime(Date date) 给日历设置日期对象
- public long getTimeInMillis() 拿到时间毫秒值
- public void setTimeInMillis(long millis) 给日历设置时间毫秒值
- public int get(int field) 获取日期中的某个字段信息
- public void set(int field,int value) 修改日历的某个字段信息
- public void add(int field,int amount) 为某个字段增加/减少指定的值
- */
- public class CalendarDemo5 {
- public static void main(String[] args) {
- //1.获取日历对象
- //细节1:Calendar是一个抽象类,不能直接new,而是通过一个静态方法获取到子类对象
- //底层原理:
- //会根据系统的不同时区来获取不同的日历对象,默认表示当前时间。
- //把会把时间中的纪元,年,月,日,时,分,秒,星期,等等的都放到一个数组当中
- // 0 :纪元
- // 1 :年
- // 2 :月
- // 3 : 一年中的第几周
- // 4:一个月中的第几周
- // 5: 一个月中的第几天(日期)
- // ....
- //细节2:
- //月份:范围0~11 如果获取出来的是.那么实际上是1月。
- //星期:在老外的眼里,星期日是一周中的第一天
- // 1(星期日) 2(星期一) 3(星期二) 4(星期三) 5(星期四) 6(星期五) 7(星期六)
- Calendar c = Calendar.getInstance();
- /*
- public final Date getTime() 获取日期对象
- public final setTime(Date date) 给日历设置日期对象
- */
- //2.修改一下日历代表的时间
- Date d = new Date(0L);
- c.setTime(d);
- System.out.println(c);
- //puslic int get(int field) 取日期中的某个字段信息
- //public void set(int field,int value) 修改日历的某个字段信息
-
- c.set(Calendar.YEAR, 2024);
- c.set(Calendar.MONTH,7);
- c.set(Calendar.DAY_OF_MONTH,5);
- //增加一个月
- c.add(Calendar.MONTH, 1);
- //java在Calendar类中,把索引对应的数字都定义成常量
- int year = c.get(Calendar.YEAR);
- int month = c.get(Calendar.MONTH);
- int date = c.get(Calendar.DAY_OF_MONTH);
- int week = c.get(Calendar.DAY_OF_WEEK);
- //public void add(int fieldint amount) 为某个字段增加/减少指定的值
-
- System.out.println(year+" "+month+" "+date+" "+getWeek(week));
-
- }
- //查表法://表:容器
- //让数据跟索引产生对应的关系
- //传入对应的数字: 1 ~7//返回对应的星期
- public static String getWeek(int index) {
- //定义一个数组,让汉字星期几 跟1~7产生对应关系
- String[] arr = {"", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
- //根据索引返回对应的星期
- return arr[index];
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。