Java时间相关API

Java时间相关API

  • System.currentTime

util.date

1602474537910

  • 月份是[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

1602475426494

一系列约定的字段

  • 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);

标签

评论