Java时间相关API
Java时间相关API
- System.currentTime
util.date
- 月份是[0,11],使用时需要加1转换为[1,12]
- 未被弃用的构造方法
- Date()
- 根据当前系统时间构造一个Date对象
- Date(long)
- 根据传入的值构造一个Date对象
public static void main(String[] args) {
Date d01=new Date();
Date d02=new Date(d01.getTime()-1000*2); //后退2秒
System.out.println(d01); //toString方法被重写过
System.out.println(d02);
Date d03=new Date(1000L*10); //从“时间零点”前移10秒
System.out.println(d03);
}
- 在实现上使用一个long型变量保存一个时间点,封装该变量和一些实用的方法,如setTime,getDay,compareTo等,实际上该类在逐渐被其他类替代,该类在逐渐被弃用
Mon Oct 12 10:31:37 CST 2020
//CST 中央标准时间
//(注)GMT格林威治时间
常用方法
- after
- before
- equals
- setTime
- getDay
- compareTo
注意这两个方法(不推荐使用)
String s=new Date().toString();
System.out.println(s); //Mon Oct 12 11:47:01 CST 2020
Date d=new Date(Date.parse(s));
System.out.println(d); //Tue Oct 13 01:47:01 CST 2020
注意,不推荐使用Date.get~方法,而换用Calendar中的方法
util.Calendar
public abstract class Calendar
一系列约定的字段
- DAY_OF_MOUTH
- DAY_OF_WEEK
- DAY_OF_YEAR
- HOUR_OF_DAY
- WEEK_OF_YEAR
- WEEK_OF_MOUTH
- YEAR
- MOUTH
- SECOND
- HOUR
注意一下字段是经测试的,其他字段的使用还不明确
-
day-of-year:该实例标志的时间点是某年中的第几天,一年中第一天返回值为1
-
day-of-mouth:该实例标志的时间点是某个月中的第几天,头标1
-
day-of-week:该实例标志的时间点某个星期中的第几天,{Calendar.MONDAY,Calendar.SUNDAY}
Calendar.MONDAY的时候表示一周的第一天是monday (法国时间)
Calendar.SUNDAY的时候表示一周中第一天为sunday (美国时间)
-
year:该实例标志的时间点的年份,(正确的年份)
-
mouth:该实例标志的时间点位于年中的第几月,头标[0-11]
-
hour-of-day:该实例标志的时间点位于天中的第几小时,[0-23]
-
second:该实例标志的时间点位于分钟中的第几秒,[0-59]
-
minute:该实例标志的时间位于小时中的第几分钟,[0-59]
Calendar与Date相互装换
Calendar.setTime(Date)
Date Calendar.getTime()
多数情况下将Data转为Calendar
text.DateFormat
public abstract class DateFormat extends Format
使用该类能够很轻易的将一个时间转化为指定该是的字符串,或将一个指定格式的字符串转为一个时间对象,该类是抽象类,一般使用其子类SimpleDateFormat
将指定格式的字符串转为Date对象
String pattern="yyyy年MM月dd日";
String strDate="1997年8月15日";
DateFormat dateFormat=new SimpleDateFormat(pattern);
try {
Date date=dateFormat.parse(strDate);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
将Date对象转为指定格式的字符串
Date birth=new Date();
System.out.println(birth);
String pattern="yyyy年MM月dd日"; //小写的mm为分钟,切记
String strDate=new SimpleDateFormat(pattern).format(birth);
System.out.println(strDate);
更多的格式化见API。
time.LocalDate
(LocalDate\LocalTime\LocalDateTime为jdk8提供)
该类线程安全
该类是不可变对象
-
[static] LocalDate.now()
-
[static] LocalDate.of(int,int/Mouth,int)
LocalDate.of(2020,10,12)
-
[static] localDate.ofYearDay(int,int)
LocalDate.ofYearDay(2020,286)
-
boolean isLeapYear(int)
判断某年是否为闰年
-
int lengthOfYear(int)
返回某年的天数
-
boolean equals(LocalDate)
-
boolean isEquals(LocalDate)
-
boolean isBefore(LocalDate)
-
boolean isAfter(LocalDate)
-
int CompareTo(LocalDate)
-
LocalDate plusYear(int)
-
LocalDate plusMouth(int)
-
LocalDate plusDay(int)
-
LocalDate plusWeek(int)
-
plusXXX可以出入负值,此时等价于minusXXX,使用plusXXX即可
localTime
该类线程安全
该类是不可变对象
该类可表示到ns的精度,但是真正的时间精度是与编码的编码质量有关。
localDateTime
该类在实现上实际上只是对LocalTime和LocalDate的封装
localDate\LocalTime\localDateTime转换
LocalDate转为localDateTime
-
localDate.atStartOfDay();
-
LocalDate.aTime(...);
LocalTime转为LocalDateTime
- LocalTime.atDate(LocalDate)
LocalDateTime向LocalDate\LocalTime装换
- LocalDateTime.toLocalDate()
- LocalDateTime.toLocalTime()
data向localXXX转换
Date d=new Date();
Instant instant=d.toInstant();
ZoneId zone=ZoneId.of("Asia/Shanghai");
//ZoneId zone=ZoneId.of(ZoneId.systemDefault());
ZonedDateTime zoneDateTime=instant.atZone(zone);
LocalDateTime ldt= zoneDateTime.toLocalDateTime();
LocalTime lt=zoneDateTime.toLocalTime();
LocalDate ld=zoneDateTime.toLocalDate();
System.out.println(ldt);
System.out.println(lt);
System.out.println(ld);
localXXX向Date转换
LocalDateTime ldt=LocalDateTime.now();
ZoneId zone=ZoneId.of("Asia/Shanghai");
ZonedDateTime zt=ZonedDateTime.of(ldt, zone);
Instant instant=Instant.from(zt);
Date d=Date.from(instant);
System.out.println(d);
近期评论