日期时间API
java.util.Date
- Date的每一个实例用于表示一个时间,内部维护一个long值,该值记录的是自1970年元旦到当前时间
- Date表示的时间之间所经过的毫秒。
- 由于Date存在时区和千年虫问题,因此操作时间的一系列API方法都“过时”了,不再建议使用
因此我们现在使用的Date仅作为表示时间使用。
常用方法:
-
long getTime( )
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 -
void setTime(long time)
用自1970年1月1日00:00:00 GMT以后time毫秒数设置时间和日期。 -
String toString( )
把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy
Thu Jan 01 08:00:00 CST 1970
其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。
java.text.SimpleDateFormat
-
使用 SimpleDateFormat 格式化日期
yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。
注意:有的格式大写,有的格式小写,例如 MM 是月份,mm 是分;HH 是 24 小时制,而 hh 是 12 小时制。
还有其他的自己参考:
E 星期几
a A.M./P.M. 标记 -
可以按照指定的日期格式将String与Date之间相互转换
示例:
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 格式化日期
String str = sdf.format(now);
System.out.println(str);
方法:
-
String format(Date date)
将给定的Date转换为String
(见上示例) -
Date parse(String str)
将给定的字符串转按照指定的格式解析成日期时间示例:
// 将一个String 按照指定的日期格式解析为Date
String str = "2019-12-20 10:45:08";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(str);
System.out.println(date);
java.util.Calendar
-
日历类->格里高里历,即通用的阳历
-
Calendar是常用的的操作时间的API,本身是一个抽象类,定义了操作时间的相关方法。
常用实现类为 java.util.GregorianCalendar ,即阳历 -
获取Calendar实例可以使用Calendar的静态方法 getInstance,大部分地区返回的都是阳历实现。
示例:
// 创建一个代表系统当前日期的Calendar对象
Calendar c = Calendar.getInstance();//默认是当前日期
常用方法
-
Date getTime()
将当前Calendar表示的日期以Date实例返回 -
void setTime(Date date)
用给定的日期设置Calendar的当前时间 -
int get(int field)
获取指定时间分量所对应的值
时间分量是一个int值,Calendar中定义了大量的常量进行了表示
时间分量:
Calendar.YEAR 年份
Calendar.MONTH 月份(是从0开始表示的)
Calendar.DATE 日期
Calendar.DAY_OF_MONTH 日期,和上面的字段意义完全相同
Calendar.DAY_OF_YEAR 年中的天
Calendar.HOUR 12小时制的小时
Calendar.HOUR_OF_DAY 24小时制的小时
Calendar.MINUTE 分钟
Calendar.SECOND 秒
Calendar.DAY_OF_WEEK 星期几 注意(这个与Date类是不同的):1代表星期日、2代表星期1、3代表星期二,以此类推
示例:
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
// 月从0开始,0表示1月
int month = calendar.get(Calendar.MONTH)+1;
int date = calendar.get(Calendar.DATE);
System.out.println(year+"-"+month+"-"+date); // 2019-12-20
// 今天是星期几?
int dow = calendar.get(Calendar.DAY_OF_WEEK)-1;
String[] data = {"日","一","二","三","四","五","六"};
System.out.println("今天是周"+data[dow]);
- int getActualMaximum(int field)
返回当前日期,给定字段的最大值
示例:
int d = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
System.out.println(d); // 365
-
int getActualMinimum(int field)
返回当前日期,给定字段的最小值 //1 -
void set(int field, int value)
用给定的值设置时间字段(时间分量)
void set(int year, int month, int date, int hour, int minute, int second)
设置年、月、日、小时、分钟、秒的值。(可随意设置,单独调整一个或多个也可)示例:
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());
// 调整年
calendar.set(Calendar.YEAR, 2008);
// 调整月
calendar.set(Calendar.MONTH, Calendar.AUGUST);
// 调整天
calendar.set(Calendar.DATE, 8);
System.out.println(calendar.getTime());
-
void add(int field, int amount)
根据日历规则,将指定的(有符号的)时间量添加到给定的日历字段中。
(对指定的时间分量加上给定的值,若给定的值是负数,则是减去) -
boolean isLeapYear(int year)
确定给定的年份是否为闰年