Java中的时间操作主要涉及到的类
- import java.text.DateFormat; // 格式化类,是一个抽象类。实现时间与字符串类型的相互转化
- import java.text.ParseException; // 用于将字符串转化为时间类型
- import java.text.SimpleDateFormat; // 是抽象类DateFormat的实现类。
- import java.util.Calendar; // 推荐使用的类。是一个抽象类。
- import java.util.Date; // 基本时间类
- import java.util.GregorianCalendar; // 抽象类Calendar的实现类。在这里可以对时间进行操作
java中时间的简介
- Java中时间的表示说白了也是数字,是从:标准纪元1970.1.1 0点开始到某个时刻的毫秒数,类型是long。
- 一个时间与字符串相相互转换的例子
// 使用DateFormat类来进行时间与字符串之间的互相转化
// 将日期转化为字符串类型,按照固定格式格式化字符串
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a W w z");
String currentTime = dateFormat.format(d1); // 将时间对象按照格式化字符串转化为字符串
System.out.println(currentTime);
String str = "2018-9-26 22:40:45";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-dd hh:mm:ss"); // 这里的格式需要与str里的保持一致
try {
Date date2 = sdf.parse(str);
System.out.println("date2:" + date2);
} catch (ParseException e) {
System.out.println("转换失败!");
}
- GregorianCalendar是Calendar的一个具体子类,提供了
世界上大多数国家/地区使用的标准日历系统。
注意:- 月份:一月是0,二月是1,以此类推,12月是11
- 星期:周日是1。。。周六是7
下面是一个简单的GregorianCalendar的例子
Calendar c = new GregorianCalendar();
c.set(2018, 8, 27, 8, 59, 59); // 如果不设置 则显示当前时间
//c.set(Calendar.YEAR, 2008);
Date d = c.getTime();
System.out.println(d);
c.add(Calendar.YEAR, 2); // 这里的YEAR可以换为MONTH等其他参数,均可以得到相应的值。
System.out.println(c.get(Calendar.YEAR));
一些其他的简单api
Date类:
- long getTime()
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 - boolean after(Date when)
测试此日期是否在指定日期之后。 - boolean before(Date when)
测试此日期是否在指定日期之前。 - int compareTo(Date anotherDate)
比较两个日期的顺序。 - boolean equals(Object obj)
比较两个日期的相等性。
Calendarl类
- abstract void add(int field, int amount)
根据日历的规则,为给定的日历字段添加或减去指定的时间量。 - boolean after(Object when)
判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果。 - boolean before(Object when)
判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果。 - void clear()
将此 Calendar 的所日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。 - void clear(int field)
将此 Calendar 的给定日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。 - Object clone()
创建并返回此对象的一个副本。 - int compareTo(Calendar anotherCalendar)
比较两个 Calendar 对象表示的时间值(从历元至现在的毫秒偏移量)。 - protected void complete()
填充日历字段中所有未设置的字段。 - protected abstract void computeFields()
将当前毫秒时间值 time 转换为 fields[] 中的日历字段值。 - protected abstract void computeTime()
将 fields[] 中的当前日历字段值转换为毫秒时间值 time。 - boolean equals(Object obj)
将此 Calendar 与指定 Object 比较。 - int get(int field)
返回给定日历字段的值。 - int getActualMaximum(int field)
给定此 Calendar 的时间值,返回指定日历字段可能拥有的最大值。 - int getActualMinimum(int field)
给定此 Calendar 的时间值,返回指定日历字段可能拥有的最小值。 - static Locale[] getAvailableLocales()
返回所有语言环境的数组,此类的 getInstance 方法可以为其返回本地化的实例。 - String getDisplayName(int field, int style, Locale locale)
返回给定 style 和 locale 下的日历 field 值的字符串表示形式。 - Map<String,Integer> getDisplayNames(int field, int style, Locale locale)
返回给定 style 和 locale 下包含日历 field 所有名称的 Map 及其相应字段值。 - int getFirstDayOfWeek()
获取一星期的第一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY。 - abstract int getGreatestMinimum(int field)
返回此 Calendar 实例给定日历字段的最高的最小值。 - static Calendar getInstance()
使用默认时区和语言环境获得一个日历。 - static Calendar getInstance(Locale aLocale)
使用默认时区和指定语言环境获得一个日历。 - static Calendar getInstance(TimeZone zone)
使用指定时区和默认语言环境获得一个日历。 - static Calendar getInstance(TimeZone zone, Locale aLocale)
使用指定时区和语言环境获得一个日历。 - abstract int getLeastMaximum(int field)
返回此 Calendar 实例给定日历字段的最低的最大值。 - abstract int getMaximum(int field)
返回此 Calendar 实例给定日历字段的最大值。 - int getMinimalDaysInFirstWeek()
获取一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则此方法将返回 1。 - abstract int getMinimum(int field)
返回此 Calendar 实例给定日历字段的最小值。 - Date getTime()
返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。 - long getTimeInMillis()
返回此 Calendar 的时间值,以毫秒为单位。 - TimeZone getTimeZone()
获得时区。 - int hashCode()
返回该此日历的哈希码。 - protected int internalGet(int field)
返回给定日历字段的值。 - boolean isLenient()
判断日期/时间的解释是否为宽松的。 - boolean isSet(int field)
确定给定日历字段是否已经设置了一个值,其中包括因为调用 get 方法触发内部字段计算而导致已经设置该值的情况。 - abstract void roll(int field, boolean up)
在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。 - void roll(int field, int amount)
向指定日历字段添加指定(有符号的)时间量,不更改更大的字段。 - void set(int field, int value)
将给定的日历字段设置为给定值。 - void set(int year, int month, int date)
设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。 - void set(int year, int month, int date, int hourOfDay, int minute)
设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。 - void set(int year, int month, int date, int hourOfDay, int minute, int second)
设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。 - void setFirstDayOfWeek(int value)
设置一星期的第一天是哪一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY。 - void setLenient(boolean lenient)
指定日期/时间解释是否是宽松的。 - void setMinimalDaysInFirstWeek(int value)
设置一年中第一个星期所需的最少天数,例如,如果定义第一个星期包含一年第一个月的第一天,则使用值 1 调用此方法。 - void setTime(Date date)
使用给定的 Date 设置此 Calendar 的时间。 - void setTimeInMillis(long millis)
用给定的 long 值设置此 Calendar 的当前时间值。 - void setTimeZone(TimeZone value)
使用给定的时区值来设置时区。 - String toString()
返回此日历的字符串表示形式。
SimpleDateFormat的一些api,主要是一些字段
字母 日期或时间元素 表示 示例
G Era 标志符 Text AD
y 年 Year 1996; 96
M 年中的月份 Month July; Jul; 07
w 年中的周数 Number 27
W 月份中的周数 Number 2
D 年中的天数 Number 189
d 月份中的天数 Number 10
F 月份中的星期 Number 2
E 星期中的天数 Text Tuesday; Tue
a Am/pm 标记 Text PM
H 一天中的小时数(0-23) Number 0
k 一天中的小时数(1-24) Number 24
K am/pm 中的小时数(0-11) Number 0
h am/pm 中的小时数(1-12) Number 12
m 小时中的分钟数 Number 30
s 分钟中的秒数 Number 55
S 毫秒数 Number 978
z 时区 General time zone Pacific Standard Time; PST; GMT-08:00
Z 时区 RFC 822 time zone -0800
常用到的格式:
yyyy-MM-dd hh:mm:ss a