1、System类中获取时间戳的方法
System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
- 此方法适于计算时间差。
计算世界时间的主要标准有:
- UTC(Coordinated Universal Time)
- GMT(Greenwich Mean Time)
CST(Central Standard Time) ```java import org.junit.Test; /**
- JDK 8之前日期和时间的API测试 */ public class DateTimeTest {
//1.System类中的currentTimeMillis() @Test public void test1(){ long time = System.currentTimeMillis(); //返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。 //称为时间戳 System.out.println(time); } }
<a name="MP50i"></a>
# 2、Java中两个Date类的使用
```java
import org.junit.Test;
import java.util.Date;
/**
* JDK 8之前日期和时间的API测试
*/
public class DateTimeTest {
/**
* java.util.Date类 ---> 表示特定的瞬间,精确到毫秒
* |---java.sql.Date类
*
* 1.两个构造器的使用
* >构造器一:Date():创建一个对应当前时间的Date对象
* >构造器二:创建指定毫秒数的Date对象
* 2.两个方法的使用
* >toString():显示当前的年、月、日、时、分、秒
* >getTime():获取当前Date对象对应的毫秒数。(时间戳)
*
* 3. java.sql.Date对应着数据库中的日期类型的变量
* >如何实例化
* >如何将java.util.Date对象转换为java.sql.Date对象
*
*/
@Test
public void test2(){
//构造器一:Date():创建一个对应当前时间的Date对象
Date date1 = new Date();
System.out.println(date1.toString()); //Sat May 09 20:09:11 CST 2020
System.out.println(date1.getTime()); //1589026216998
//构造器二:创建指定毫秒数的Date对象
Date date2 = new Date(1589026216998L);
System.out.println(date2.toString());
//创建java.sql.Date对象
java.sql.Date date3 = new java.sql.Date(35235325345L);
System.out.println(date3); //1971-02-13
//如何将java.util.Date对象转换为java.sql.Date对象
//情况一:
// Date date4 = new java.sql.Date(2343243242323L);
// java.sql.Date date5 = (java.sql.Date) date4;
//情况二:
//将util下的Date()装换成 sql下的Date()
Date date6 = new Date();
java.sql.Date date7 = new java.sql.Date(date6.getTime());
}
}
3、SimpleDateFormat的使用
- Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
- 它允许进行
- 格式化:日期—>文本
- 解析:文本—>日期 ```java import org.junit.Test;
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;
/**
- jdk 8 之前的日期时间的API测试
- 1.System类中currentTimeMillis();
- 2.java.util.Date和字类java.sql.Date
- 3.SimpleDateFormat
4.Calendar / public class DateTime { /*
- SimpleDateFormat的使用:SimpleDateFormat对日期Date类的格式化和解析
- 1.两个操作
- 1.1格式化:日期—-》字符串
- 1.2解析:格式化的逆过程,字符串—-》日期 *
2.SimpleDateFormat的实例化 */ @Test public void testSimpleDateFormat() throws ParseException { //实例化SimpleDateFormat SimpleDateFormat sdf = new SimpleDateFormat();
//格式化:日期—-》字符串 Date date = new Date(); System.out.println(date); //Sun May 10 16:34:30 CST 2020
String format = sdf.format(date); System.out.println(format); //20-5-10 下午4:34
//解析:格式化的逆过程,字符串—-》日期 String str = “19-12-18 上午11:43”; Date date1 = sdf.parse(str); System.out.println(date1); //Wed Dec 18 11:43:00 CST 2019
//*按照指定的方式格式化和解析:调用带参的构造器* // SimpleDateFormat sdf1 = new SimpleDateFormat(“yyyyy.MMMMM.dd GGG hh:mm aaa”); SimpleDateFormat sdf1 = new SimpleDateFormat(“yyyyy.MMMMM.dd GGG hh:mm aaa”); //格式化 String format1 = sdf1.format(date); System.out.println(format1); //02020.五月.10 公元 04:32 下午 //解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现), //否则,抛异常 Date date2 = sdf1.parse(“02020.五月.10 公元 04:32 下午”); System.out.println(date2); //Sun May 10 16:32:00 CST 2020 } }
<a name="uf5ER"></a>
## 3.1、SimpleDateFormat的练习
```java
import org.junit.Test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* jdk 8 之前的日期时间的API测试
* 1.System类中currentTimeMillis();
* 2.java.util.Date和字类java.sql.Date
* 3.SimpleDateFormat
* 4.Calendar
*/
public class DateTime {
/**
* 练习1:字符串"2020-09-08"转换为java.sql.Date
*
*/
@Test
public void testExer() throws ParseException {
String birth = "2020-09-08";
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf1.parse(birth);
// System.out.println(date);
java.sql.Date birthDate = new java.sql.Date(date.getTime());
System.out.println(birthDate);
}
}
/**
* 练习二:"三天打渔两天晒网" 1990-01-01 xxxx-xx-xx 打渔?晒网?
*
* 举例:2020-09-08 ? 总天数
*
* 总天数 % 5 == 1,2,3 : 打渔
* 总天数 % 5 == 4,0 : 晒网
*
* 总天数的计算?
* 方式一:( date2.getTime() - date1.getTime()) / (1000 * 60 * 60 * 24) + 1
* 方式二:1990-01-01 --> 2019-12-31 + 2020-01-01 -->2020-09-08
*
*/
4、Calendar日历类的使用
- Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
- 获取Calendar实例的方法
- 使用Calendar.getInstance()方法
- 调用它的子类GregorianCalendar的构造器。
- 一个Calendar的实例是系统时间的抽象表示,通过get(intfield)方法来取得想要的时间信息。比如YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、MINUTE、SECOND
- public void set(intfield,intvalue)
- public void add(intfield,intamount)
- public final Date getTime()
- public final void setTime(Date date)
- 注意:
- 获取月份时:一月是0,二月是1,以此类推,12月是11
- 获取星期时:周日是1,周二是2,。。。。周六是7 ```java import java.util.Calendar; import java.util.Date;
import org.junit.Test;
/**
- jdk 8 之前的日期时间的API测试
- 1.System类中currentTimeMillis();
- 2.java.util.Date和字类java.sql.Date
- 3.SimpleDateFormat
4.Calendar */ public class DateTime {
/**
- Calendar日历类的使用 */ @Test public void testCalendar(){ //1.实例化 //方式一:创建其子类(GregorianCalendar)的对象 //方式二:调用其静态方法getInstance() Calendar calendar = Calendar.getInstance();
// System.out.println(calendar.getClass()); //class java.util.GregorianCalendar
//2.常用方法
//get()
int days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days); //10
System.out.println(calendar.get(Calendar.DAY_OF_YEAR)); //131,今天是这一年的131天
//set()
//calendar可变性
calendar.set(Calendar.DAY_OF_MONTH,22);
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days); //22
//add()
calendar.add(Calendar.DAY_OF_MONTH,-3);
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days); //22-3 --》19
//getTime():日历类---> Date
Date date = calendar.getTime();
System.out.println(date); //Tue May 19 17:12:06 CST 2020
//setTime():Date ---> 日历类
Date date1 = new Date();
calendar.setTime(date1);
days = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println(days); //10
}
}
```