在计算机世界,我们把1970 年 1 月 1 日 00:00:00定为基准时间,每个度量单位是毫秒(1秒的千分之一)。
我们用long类型的变量来表示时间,从基准时间往前几亿年,往后几亿年都能表示。如果想获得现在时刻的“时刻数值”,可以使用:
long now = System.currentTimeMillis();
这个“时刻数值”是所有时间类的核心值,年月日都是根据这个“数值”计算出来的。我们工作学习涉及的时间相关类有如下这些:
Date类
在标准Java类库中包含一个Date类。它的对象表示一个特定的瞬间,精确到毫秒。在网上商城下单时,在对报销单进行审核时,都需要获取当前的时间,通过Date类就可以完成。
Date类的使用:
package com.bisxt.date;
import java.sql.Timestamp;
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
// Date date = new Date(0);
// Date date = new Date(-1000*60*60*24);//1969-12-31 8:00:00
// Date date = new Date(-1000*60*60*24*60L);//1969-11-2 8:00:00
// Date date = new Date(System.currentTimeMillis());//2021-1-31 16:03:00
Date date = new Date();//2021-1-31 16:03:00 看看其无参构造函数源码就明白了!
System.out.println(date.toString());
System.out.println(date.toLocaleString());
System.out.println(date.getYear());//121=2021-1900
System.out.println(date.getMonth());//月份-1,其范围是0-11
System.out.println(date.getDate());//日
System.out.println(date.getDay());//星期几 今天是周日,为0.范围是0-6
System.out.println(date.getHours());
System.out.println(date.getMinutes());
System.out.println(date.getSeconds());
System.out.println("========================");
long time = date.getTime();
System.out.println(time);//1612080846788
System.out.println(System.currentTimeMillis());//1612080846818
// java.sql.Date sdate; 输出的时间只显示年月日
// java.sql.Time stime; 输出的时间只显示时分秒
// java.sql.Timestamp timestamp; 更精确,显示年月日时分秒
java.sql.Timestamp timestamp1=new Timestamp(date.getTime());
System.out.println(timestamp1);//2021-01-31 17:06:06.174
}
}
DateFormat类
DateFormat是一个抽象类,一般使用它的子类SimpleDateFormat类来实现,主要作用就是把时间对象转化成指定格式的字符串。反之也可以把指定格式的字符串转化成时间对象。
需求1:网页注册,需要输入日期,在网页上输入的所有内容,xiaoming,23, 1999-12-23,1999/12/23,但是传送到后台接收到都是字符串 “xiaoming”, “23”, “1999-12-23”,“1999/12/23”,需要把字符串----->日期
需求2:注册成功后,在网页上显示日期,可以不同格式来显示"1999-12-23", “1999/12/23”,“1999年12月23日”,需要把日期----->字符串。
DateFormat类的使用:
package com.bisxt.date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*
最常用的语句:
DateFormat sdf=new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
Date date=sdf.parse(str);
*/
public class TestDateFormat {
public static void main(String[] args) {
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String str = "1999-08-03 8:17:17";
Date date=null;
try {
date = sdf.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
// System.out.println(date.toLocaleString());//1999-8-3 17:17:17
String str2 = sdf.format(date);
System.out.println(str2);//1999-08-03 05:17:17
DateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 kk时mm分ss秒");
String str3 = sdf1.format(date);
System.out.println(str3);//1999年08月03日 05时17分17秒
java.sql.Date sdate = java.sql.Date.valueOf("1999-08-03");
System.out.println(sdate);
int age = Integer.parseInt("23");
System.out.println(age);
}
}
关于时间和日期模式:
Calendar类
Calendar类的使用:
package com.bisxt.date;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class TestCalendar {
public static void main(String[] args) {
//创建Calendar对象
Calendar calendar = new GregorianCalendar();
//输出日期中的各个部分
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH));//范围是0-11
System.out.println(calendar.get(Calendar.DATE));
System.out.println(calendar.get(Calendar.HOUR));
System.out.println(calendar.get(Calendar.MINUTE));
System.out.println(calendar.get(Calendar.SECOND));
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
//修改日期的各部分
calendar.set(Calendar.YEAR,2020);
System.out.println(calendar.get(Calendar.YEAR));
calendar.set(Calendar.MONTH,3);
System.out.println(calendar.get(Calendar.MONTH));
//Date--Calendar之间的转换
//Date ---->Calendar
Date now = new Date();
calendar.setTime(now);
//Calendar---->Date
Date now2 = calendar.getTime();
}
}
使用Calendar类实现万年历的功能:
package com.bisxt.date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class VisualCalender {
public static void main(String[] args) {
System.out.println("请输入日期(按照格式:2021-2-1): ");
Scanner scanner = new Scanner(System.in);
String str=scanner.nextLine();
DateFormat format = new SimpleDateFormat("yy-MM-dd");
try {
Date date = format.parse(str);
//3.将日期转换成日历
Calendar calender = new GregorianCalendar();
calender.setTime(date);
//4.把日期中的Date取出来
int day = calender.get(Calendar.DATE);
//5.日历变成了当月的1日
calender.set(Calendar.DATE,1);
//6.打印日历头信息
System.out.println("日\t一\t二\t三\t四\t五\t六");
//7.打印1日之前的空格(关键是知道1日是星期几)
//注意这里i要从1开始,而不是0,范围是1-7,周六是7
for (int i = 1; i < calender.get(Calendar.DAY_OF_WEEK); i++) {
System.out.print("\t");
}
//8.打印日历1-31/28/30
int maxDate = calender.getActualMaximum(Calendar.DATE);
for (int i = 1; i <=maxDate; i++) {
//8.1如果是当天,打印*
if (i==day){
System.out.print("*");
}
//8.2打印该天
System.out.print(i+"\t");
//8.3如果是周六,换行
int w=calender.get(Calendar.DAY_OF_WEEK);
if (w==Calendar.SATURDAY){
System.out.println();
}
//8.4日历改为下一天
calender.add(Calendar.DATE,1);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}