Java日期时间
java.util包提供了Date类来封装当前的日期和时间,Date类提供两个构造行数来实例化Date对象。
第一个构造函数使用当前日期和时间来初始化对象,
Date()
第二个构造函数接收一个参数,该参数是是从1970年1月1日的微秒数。
Date(long millisec)
Date对象创建以后,可以调用下面的方法。
获取当前日期时间
Java中获取当前日期和时间都很简单,使用Date对象的toString()方法来打印当前日期和时间,如下所示:
import java.util.*
public class DateDemo{
//初始化Date对象
Date date = new Date();
//使用toString()函数显示日期时间
System.out,println(date.toString());
}
日期比较
Java使用一下三种方法来比较两个日期:
使用SimpleDateFormat格式化日期
SimpleDateFormat是一个以语言环境敏感的方式来格式化和分析日期的类,SimpleDateFormat允许你选择仍和用户自定义事件格式来运行,例如:
import java.util.*;
imprort java.text.*;
public class DateDemo{
public static void main(String[] args){
Date dNow = new Date();
SimpleDateFormat ft = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.prinfln("Current Date :"+ft.format(dNow));
}
}
简单的DateFormat格式化编码
事件模式字符串用来指定时间格式,在此模式中,所有的ASCII字母都被保留为模式字母,定义如下:
使用printf格式化日期
printf方法可以很轻松的格式化时间和日期。使用两个字母格式,他以t开头并且以下面表格中的一个字母结尾。例如:
import java.util.Date;
public class DateDemo{
public static void main(String[] args){
Date date = new Date();
String str = String.format("Current Date/Time: %tc",date);
System.out.printf(str);
}
}
若果你需要重复提供日期,那么利用这种方式来格式化它的每一部分就有点复杂了,因此,可以利用一个格式化字符串指出要被格式化的参数的索引。
索引必须紧跟在%后面,并且需要以$结束。例如:
import java.util.Date;
public class DateDemo{
public static void main(String[] args){
Date date = new Date();
System.out.printf("%1$s %2$tB %2$td,%2$tY","Due date:",date);
}
}
日期和时间转换字符:
解析字符串为施加
SimpleDateFormat类有一些附加的方法,特别是parse(),它视图按照给定的SimpleDateFormat对象的格式化储存来解析字符串。例如:
import java.util.*;
import java.text.*;
public class DateDemo{
public static void main(String[] args){
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
String input = args.lenght == 0 ? "1818-11-11" : args[0];
System.oyt.print(input+"parses as ");
Date t ;
try{
t = ft.format(input);
System.out.println(t);
}catch(ParseException e){
System.out.println("Unparseable using" + ft);
}
}
}
测量时间
下面的一个例子表名如何测试时间间隔(以毫秒为单位)
import java.util.*;
public class DiffDemo{
public static void main(String[] args){
try{
//System.currentTimeMillis()其实就等于 new Date().getTime(),但是效率和内存才、占用都优于后者;,详情可以参考https://www.cnblogs.com/wuchen/archive/2012/06/30/2570746.html
long start = System.currentTimeMillis();
System.out.println(new Date()+"\n");
System.out.println(new Date( ) + "\n");
Thread.sleep(5*60*10);
System.out.println(new Date( ) + "\n");
long end = System.currentTimeMillis( );
long diff = end - start;
System.out.println("Difference is : " + diff);
}catch(Exception e){
}
}
}
Calendar类
我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。
创建一个代表系统当前日期的Calendar对象
Calendar c = Calendar.getInstance();//默认是当前日期
创建一个指定日期的Calendar对象
使用Calendar类才、代表特定的时间,需要首先创建一个Calendar的对象,然后在设定该对象重的年月日参数来完成
//创建一个代表2019年6月4日的Calendar对象
Calendar c1 = Calendar.getInstance();
c1.set(2019, 6 - 1, 4);
Calendar类对象字段类型:
Calendar类对象信息的设置
Set设置:
如:
Calendar c1 = Calendar.getInstance();
调用:
public final void set(int year,int month,int date)
c1.set(2019,6-1,5);//把Calendar对象c1的年月日设为2019.5.5
利用字段类型设置
如果只设定某个字段,例如日期的值,则可以使用set方法:
public void set(int field,int value)
把c1对象的日期设置为10号,其他所有数值将会被重新计算
c1.set(Calendar.DATE,10);
其他字段属性set的意义以此类推。
Add设置:
Calendar c1 = Calendar.getInstance();
//把c1对象的日期加上10,也就是c1也就表示十天后的日期,其他所有的数值将会被重新计算
c1.add(Calendar.DATE,10);
//反之把c1对象的日期减掉10,也就是c1也就表示十天前的日期,其他所有的数值将会被重新计算
c1.add(Calendar.DATE,-10);
其他字段属性的add的意义以此类推
GregorianCalendar类(还没使用到过):
Calendar类实现了公里日历,GregorianCalendar是Calendar类的一个具体实现。
Calendar的getInstance()方法返回一个默认当前的语言环境和时区初始化的GregorianCalendar对象。GregorianCalendar定义了两个字段:AD和BC。这是代表公里定义的两个时代。
下面列出了GregorianCalendar对象的几个构造方法: