一、java.lang.System类
System类提供的public static long currentTimeMillis()用来返回当前时
间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
@Test
public void test(){
long time = System.currentTimeMillis();
//时间戳,可用于生成订单号
}
此方法适于计算时间差。
计算世界时间的主要标准有:
- UTC(Coordinated Universal Time)
- GMT(Greenwich Mean Time)
- CST(Central Standard Time)
二、java.util.Date类
表示特定的瞬间,精确到毫秒
构造器:
- Date(): ++使用无参构造器创建的对象可以获取本地当前时间++。
- Date(long date)
常用方法
- getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象
表示的毫秒数。 - toString():把此 Date 对象转换为以下形式的 String: dow mon dd
hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue,
Wed, Thu, Fri, Sat), zzz是时间标准。 - 其它很多方法都过时了
import java.util.Date;//记得导包
@Test
public void test(){
Date date = new Date();
System.out.println(date);
System.out.println(date.toString());//日期
System.out.println(date.getTime());//毫秒数
//把毫秒数便成日期
Date date1 = new Date(date.getTime());
System.out.println(date1.toString());
}
三、 java.sql.Date对应着数据库中的日期类型的变量
1、如何实例化(创建java.sql.Date的对象)
@Test
public void test(){
java.sql.date date = new java.sql.Date();
//和lang.Date同时出现时,写全类名
System.out,println(date.toString());
//2020-11-11
}
2、sql.Date --> util.Date对象
直接复制(多态性)(++sql.Date 是 util.Date 的子++类)
3、如何将 util.Date --> sql.Date对象
@Test
public void Teat(){
//情况一
Date date1 = new java.sql.Date(65643563456634L);
java.sql.Date date2 = (java.saql.Date)date1;
//情况二:要放在数据可中
Date date3 = new Date();
java.aql.DAte date4 = new java.sq;.Date(date3.getTime());
// 转化为毫秒数
}
四、java.test.SimpleDateFoemat类
1、说明
Date类的API不易于国际化,大部分被废弃了, java.text.SimpleDateFormat
类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
它允许进行
格式化:日期 --> 字符串(指定格式)、
解析:字符串 --> 日期
格式化:
SimpleDateFormat() :默认的模式和语言环境创建对象
public SimpleDateFormat(String pattern): 该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:
public String format(Date date): 方法格式化时间对象date
解析:
public Date parse(String source): 从给定字符串的开始解析文本,以生成一个日期。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ThIOrCL9-1611074148215)(810CD647D26B419796C33B7D5F89F9B8)]
2、SimpleDateFormat的实例化
@Test
piblic void test(){
//实例化
SimpleDateFormat sdf = new SimpledateFormat();
//格式化:日期 --> 字符串(指定格式)
Date date = new Date();//util下的DAte类
String format = sdf.format(date);
System.out.println(fprmat);
//解析:字符串 --> 日期
String str = "19-12-18 上午11:43";//有格式要求(++API里面有++)
//解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现),
就会抛异常
Date date1 = sdf.parse(str);
System.out.println(date1);
//按照指定的方式格式化和解析:调用带参的构造器
SimpleDateFormat sdf2 = new SimDateFormat("yyyy-MM-dd hh:mm:ss");
}
3、练习1:将字符串"2020-11-11"转化为java.sql.Date
@Test
public void test() throws ParseException {
String str = "2020-11-11";
//实例化SimpleDateFormat
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
//转化成util.Date格式
Date date = simpleDateFormat.parse(str);
//转化为sql.Date格式 调用构造器
java.sql.Date date2 = new java.sql.Date(date.getTime());
System.out.println(date2);
}
练习2 “三天打鱼两天晒网” 1990-01-01
总天数 % 5 ==1,2,3 打鱼
总天数 % 5 ==4,0 晒网
方式一: 用毫秒数计算(date2.gtTime() - date1.getTime() )(1天 = 10006060*24)+ 1
@Test
public void test2() throws ParseException {
String str1 = "1990-01-01";
String str2 = "2020-09-08";
//实例化SimpleDateFormat
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
//转化成util.Date格式
Date date1 = simpleDateFormat.parse(str1);
Date date2 = simpleDateFormat.parse(str2);
long day = (date2.getTime() - date1.getTime())/(1000*60*60*24)+1;
if(day%5==4||day%5==0){
System.out.println("晒网");
}else{
System.out.println("打鱼");
}
}
方式二:老老实实算吧
五、java.util.Calender(日历)类(抽象类)
1、说明
Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
- 获取Calendar实例的方法
- 使用Calendar.getInstance()方法
- 调用它的子类GregorianCalendar的构造器。
一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想
要的时间信息。比如YEAR、 MONTH、 DAY_OF_WEEK、 HOUR_OF_DAY 、
MINUTE、 SECOND
- public void set(int field,int value)
- public void add(int field,int amount)
- public final Date getTime()
- public final void setTime(Date date)
注意:
- 获取月份时: 一月是0,二月是1,以此类推, 12月是11
- 获取星期时: 周日是1,周二是2 , 。 。。。周六是7
@Test
public void test(){
//1、实例化
//方式一:创建其子类(GregorianCalendar)的对象
//方式二:调用其静态方法getInstance()
Calendar calendar = Calendar.getInstance();
//常用方法
// get()
int day1 = calendar.get(Calendar.DAY_OF_MONTH);//这个月的第几天
int day2 = calendar.get(Calendar.DAY_OF_YEAR);//这年的第几天
// set()
calendar.set(Calendar.DAY_OF_MONTH,22);
//把 ”这个月的第几天“ 改成了 22 -- Calendar类的可变性
// add()
calendar.add(Calendar.DAY_OF_MONTH,3);
//把 ”这个月的第几天“ 加 3天
// getTime() :日历类 --> util.Date类
Date date = calendar.getTime();
// setTime() : util.Date类 --> 日历类
Date date2 = new Date();
calendar.setTime(date2);
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2P1TmEMp-1611074148217)(DCBC3C05913F4AE3877CF88BF4D5ED86)]
2、实例化
方式一:创建其子类(GregorianCalendar)的对象
方式二:调用其静态方法getInstance()
@Test
public void test(){
//1、实例化
//方式一:创建其子类(GregorianCalendar)的对象
//方式二:调用其静态方法getInstance()
Calendar calendar = Calendar.getInstance();
}