Date日期类型
-
是一个用来表示时间、日期的类,这个类在 java.util 包中,在使用 Date的时候,一定要注意 : 在 java.sql 包中,也有一个Date,千万不要导错包了。
-
java中的时间使用标准类库的Date类型来表示,是用距离某一个固定时间点的毫秒数表达的一个特定的时间点:
-
固定时间点(纪元时间点):1970年1月1日00:00:00
-
UTC(Universal Time Coordinated世界调整时间)与GMT(Greenwich Mean Time格林威治时间)一样,是一种具有实际目的的科学标准时间。
-
Date类的大多数用于进行时间分量计算的方法已经被Calendar取代。
常用构造器与方法
Date() :获取当前系统时间
Date(long time):设置一个距离固定点的指定毫秒数的时间点。
long getTime()
void setTime(long time)
String toString() 格式: Thu May 24 19:32:14 CST 2018
public static void main(String[] args) {
//使用Date类型,来获取当前系统时间
Date now = new Date();
System.out.println(now);
// 使用有参构造器,来获取距离纪元的2天后的时间
Date d1 = new Date(3600*24*1000*2);
System.out.println(d1);
//获取毫秒数:
long time = now.getTime();
System.out.println(time);
//将long的最大值作为毫秒数,算一下距离1970年是哪年那月那日。
d1.setTime(Long.MAX_VALUE);
System.out.println(d1);
}
SimpleDateFormat类型
java.text.SimpleDateFormat是一个用来格式化和解析日期的具体类
它允许进行格式化(日期 ->文本)、解析(文本 -> 日期)和规范化
-
将一个Date对象转成一个指定格式的字符串
-
将一个自定格式的字符串转成一个Date对象
常用构造器和方法
- SimpleDateFormat()
- SimpleDateFormat(String pattern):指定一个日期格式符号来构造对象
final String format(Date date) 格式化方法,日期 --->字符串
Date parse(String source) throws ParseException 解析方法,字符串--->日期
|----|-------------|-----------------------------------------------------------------------|
| 字符 | 含义 | 栗子 |
| y | 年 | yyyy年-2025年;yy年-25年 |
| M | 月 | MM月-02月;M月-2月 |
| d | 日 | dd日-07日;d日-7日 |
| E | 星期 | E-星期日(Sun) |
| a | 上午下午(AM、PM) | a-下午(PM) |
| H | 24小时制 | a h时--------下午 10时HH:mm:ss------12:21:34hh(a):mm:ss------12(PM):21:34 |
| h | 12小时制 | |
| m | 分钟 | |
| s | 秒 | |日期转换成字符串 :
//获取当前系统时间
Date now = new Date();
System.out.println(now);
//需要使用SimpleDateFormat对象来进行格式化 年-月-日 时:分:秒 E a
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss E a");
String str = sdf.format(now);
System.out.println("显示时间:"+str);
字符串转日期:
String str2 = "2003年2月7号00点00分";
// 注意: 字符串转日期时,SimpleDateFormat里的格式必须按照字符串来设定,否则报异常
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd号HH点mm分");
Date birthday = sdf1.parse(str2);
System.out.println(birthday);
//再次获取毫秒数
System.out.println(birthday.getTime());
计算自己活了几天:
//获取当前系统时间距离生日那天的毫秒数
long time = now.getTime()-birthday.getTime();
System.out.println(time/1000/3600/24);
Calendar类型
Calendar: 日历,是用来表示时间、日期的类。在Date类中,有很多的方法都已经废弃了,使用 Caneldar中的某些方法进行实现。
java.util.Calendar类用于封装日历信息,其主要作用在于其方法可以对时间分量进行运算。
Calendar是抽象类型,其具体子类是针对不同国家的日历系统,其中应用最广泛的是GregorianCalendar(格里高利历,即通用的阳历),对应世界上绝大多数国家/地区使用的标准日历系统。
程序员不需要直接调用子类型的构造器来获取日历对象,类里封装了一个工具方法getInstance(),来获取该地区的子类型对象。
常用方法:
- getInstance方法:
Calendar提供了一个类方法getInstance,以获取此类型的一个通用的对象
此方法返回一个Calendar对象,其日历字段已经由当前日期和时间初始化
- Date getTime();返回一个Date类型来描述日期
- void get(int Field):用Calendar表示Date所描述的日期
- int getActualMaximum(int field) :指定一个时间常量,返回指定日历分量可能拥有的最大值。
- void add(int field , int mount):指定一个时间常量,在此时间分量上增加指定的数值,若为负值,则是减去指定的数值。
- 时间常量:
Calendar.YEAR: 年
Calendar.MONTH: 月 注意 该值的范围是0~11,分别表示1月~12月。 因此表示月份时,要+1操作。 设置月份时,要-1操作。
Calendar.DAY_OF_MONTH 日
Calendar.DATE 日
Calendar.HOUR_OF_DAY 24小时制的时
Calendar.HOUR 12小时制的时
Calendar.MINUTE
Calendar.SECOND
Calendar.DAY_OF_WEEK: 星期几 范围1~7, 1表示周日, 7表示周六, 显示时要-1操作
Calendar.DAY_OF_YEAR: 一年中的第几天。
//想要获取一个日历对象Calendar cal = Calendar.getInstance();
System.out.println(cal);
常用方法:
Date time = cal.getTime();
System.out.println(time);
String calendarType = cal.getCalendarType();
System.out.println(calendarType);
//获取各种时间分量
System.out.println(cal.get(Calendar.YEAR));
System.out.println(cal.get(Calendar.MONTH));
System.out.println(cal.get(Calendar.DAY_OF_MONTH));
System.out.println(cal.get(Calendar.DATE));
System.out.println(cal.get(Calendar.HOUR_OF_DAY));
System.out.println(cal.get(Calendar.HOUR));
System.out.println(cal.get(Calendar.MINUTE));
System.out.println(cal.get(Calendar.SECOND));
System.out.println(cal.get(Calendar.MILLISECOND));
System.out.println(cal.get(Calendar.AM_PM));
System.out.println(cal.get(Calendar.DAY_OF_WEEK));//注意了
System.out.println(cal.get(Calendar.DAY_OF_YEAR));
设置时间分量:
// 修改成北京奥运时间: 2008-8-8日 20:08:00
cal.set(Calendar.YEAR,2008);
System.out.println(cal.getTime());
cal.set(Calendar.MONTH,8-1);
cal.set(Calendar.DAY_OF_MONTH,8);
cal.set(Calendar.HOUR_OF_DAY,20);
cal.set(Calendar.MINUTE,8);
System.out.println(cal.getTime());
//调用其他重载方法
cal.set(2009,10-1,12);
System.out.println(cal.getTime());
打印今年的每月的最后一天的日期数
Calendar c = Calendar.getInstance();
for(int month=1;month<=12;month++){
c.set(Calendar.MONTH,month-1); // 修改月份, 注意-1操作。
int actualMaximum = c.getActualMaximum(Calendar.DATE); //获取当月的日期分量的最大值
System.out.println(month+"月有"+actualMaximum+"天");
}
知道生产日期和保质期,计算促销日:
比如生产日期: 2025年1月12日, 保质期150天, 提前30天开始促销,计算促销日
c.set(2025,1-1,12);
c.add(Calendar.DAY_OF_MONTH,150-30);
System.out.println(c.getTime());