1、Date类
(1)时间原点:
时间原点是1970年1月1日00:00:00
(2)构造方法:
Date类的构造方法一共有六个,其中四个已经过时:
空参的构造方法,获取当前操作系统的日期和时间:
有参数的构造方法,将对应的毫秒值转化为日期和时间:
将Date自元年开始表示的日期转化为毫秒值:
将毫秒值转化为日期:
打印Date对象时默认调用此方法:
(3)方法的运用:
import java.util.Date; public class DateDemo { public static void main(String[] args) { Date date = new Date(0);// 毫秒值为0,即元年 System.out.println("date类元年为:" + date); Date date1 = new Date(12345678912345L);// 毫秒值 System.out.println("date类元年后的12345678912345毫秒为:" + date1); Date date2 = new Date(); System.out.println("现在的时间为:" + date2.getTime() + "毫秒"); System.out.println("现在的时间为:" + date2.toString()); } }
从运行结果来看date类的元年为:1970年1月1日08:00:00,不是1970年1月1日00:00:00,是因为中国是东八区,所以要加上8个小时。
2、DateFormat类
DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。可以将一个Date对象转换为一个符合指定格式的字符串,也可以将一个符合指定格式的字符串转为一个Date对象。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。
SimpleDateFormat
是一个以与语言环境有关的方式来格式化和解析日期的具体类。
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatDemo {
public static void main(String[] args) throws ParseException {
Date date2 = new Date();
System.out.println("现在的时间为:" + date2.getTime() + "毫秒");
System.out.println("现在的时间为:" + date2.toString());
Date date = new Date(date2.getTime());
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");// 对日期进行格式化
String str_time = df.format(date);
System.out.println(str_time);// 把Date对象转换成String
String str = "2019年7月9日";
DateFormat df1 = new SimpleDateFormat("yyyy年MM月dd日");
Date date1 = df1.parse(str);//parse: 从给定字符串的开始解析文本,以生成一个日期。
System.out.println(date1);
}
}
3、Calendar类
Calendar类:是日历类,有很多静态方法。
import java.util.Calendar;
import java.util.Date;
public class Calendardemo {
public static void main(String[] args) {
//Calendar类的方法getTime()
Calendar c1 = Calendar.getInstance();//不需要直接new 子类的对象,通过静态方法直接获取
Date date = c1.getTime();//把日历对象,转成Date日期对象
System.out.println(date);
Calendar c2 = Calendar.getInstance();
c2.add(Calendar.DAY_OF_MONTH, -300);// 让日历中的天数向后偏移300天
int year = c2.get(Calendar.YEAR);//年
int month = c2.get(Calendar.MONTH) + 1;//月,月份从零开始,所以月份要加1
int day = c2.get(Calendar.DAY_OF_MONTH);//日
System.out.println(year + "年" + month + "月" + day + "日");
Calendar c3 = Calendar.getInstance();
c3.set(2099, 4, 1);
int year1 = c3.get(Calendar.YEAR);//年
int month1 = c3.get(Calendar.MONTH) + 1;//月
int day1 = c3.get(Calendar.DAY_OF_MONTH);//日
System.out.println(year1 + "年" + month1 + "月" + day1 + "日");
Calendar c4 = Calendar.getInstance();
int year2 = c4.get(Calendar.YEAR);//年
int month2 = c4.get(Calendar.MONTH) + 1;//月
int day2 = c4.get(Calendar.DAY_OF_MONTH);//日
System.out.println(year2 + "年" + month2 + "月" + day2 + "日");
Calendar c5= Calendar.getInstance();
System.out.println("年:" + c5.get(Calendar.YEAR));
System.out.println("月:" + (c5.get(Calendar.MONTH) + 1));
System.out.println("日:" + c5.get(Calendar.DAY_OF_MONTH));
System.out.println("时:" + c5.get(Calendar.HOUR_OF_DAY));
System.out.println("分:" + c5.get(Calendar.MINUTE));
System.out.println("秒:" + c5.get(Calendar.SECOND));
}
}
最大的特点是可以分别获取:年月日时分秒
总结:
1、第一代、第二代和第三代获取当前日期
public class DateDemo { @Test public void test1(){ Date date=new Date(); SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd hh时mm分ss秒"); String dateString=simpleDateFormat.format(date); System.out.println(dateString); } @Test public void test2(){ Calendar calendar=Calendar.getInstance(); int year=calendar.get(Calendar.YEAR); int month=calendar.get(Calendar.MONTH); int day=calendar.get(Calendar.DAY_OF_MONTH); int hour=calendar.get(Calendar.HOUR); int minute=calendar.get(Calendar.MINUTE); int second=calendar.get(Calendar.SECOND); System.out.println(year+"-"+month+"-"+day+"-"+hour+"时"+minute+"分"+second+"秒"); }
@Test public void test3(){//jdk8 LocalDateTime localDateTime=LocalDateTime.now(); DateTimeFormatter dateTimeFormatter=DateTimeFormatter.ofPattern("yyyy-MM-dd HH时mm分ss秒"); String dateString=dateTimeFormatter.format(localDateTime); System.out.println(dateString); } }
2020-08-04 19时33分53秒