1. Epoch Time

  • System.currentTimeMillis(), 返回值long类型参数, 获取当前日期的毫秒值 3742769374405
  • 时间原点: 公元1970年1月1日,午夜0:00:00 英国格林威治 毫秒值就是0
  • 时间和日期的计算,必须依赖毫秒值

    2. java.util.Date

  • 构造方法:

    • public Date():当前系统的时间和日期
    • public Date(long times)
  • Date类的get和set方法:
    • public long getTime():将当前的日期对象,转为对应的毫秒值
    • public void setTime(long times):根据给定的毫秒值,生成对应的日期对象

      3. java.text.DateFormat

      DateFormat是一个抽象类,它能对日期进行格式化。
      实际使用是子类java.text.SimpleDateFormat

      对日期进行格式化的步骤:

  1. 创建SimpleDateFormat对象,在类构造方法中,写入字符串的日期格式 (自己定义)
  2. 调用 public String format(Date date) 传递日期对象,返回字符串 ```java /*
    • yyyy 年
    • MM 月
    • dd 日
    • HH 0-23小时
    • mm 0-59分
    • ss 0-59 秒
    • SSS 0-999毫秒
    • X|XX|XXX => -08 | -0800 | -08:00 ISO 8601 time zone
    • z|zz|zzz => Pacific Standard Time | PST | GMT-08:00 */ DateFormat formatter = new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ssXXX”); ZoneId z = ZoneId.of( “America/Toronto” ); formatter.setTimeZone(TimeZone.getTimeZone(z));

String myDateStr = formatter.format(new Date());

  1. **注意**:DateFormat 对象默认你提供的DatetimezoneUTC. 所以使用时应该设置calendar的时区。
  2. <a name="hn0bF"></a>
  3. ### 把字符串转换成Date
  4. - 调用方法 parse(dateStr) 传递String,返回Date
  5. - 注意:转换时,该String要符合指定格式,否则会抛出`parseException`
  6. ```java
  7. DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
  8. Date date = formatter.parse("2017-11-14T16:02:39+02:00");

4. java.util.Calendar

Calendar是一个抽象类,不需要直接new子类对象而是通过静态方法getInstance()获取。其真实实现类是GregorianCalendar

成员方法:

  • Date getTime() 把日历对象,转成Date日期对象
  • void setTime(Data date): 把Date日期转成日历对象
  • get(日历字段) 获取指定日历字段的值

    1. // 获取年份
    2. int year = c.get(Calendar.YEAR);
    3. // 获取月份, 需要手动+1
    4. int month = c.get(Calendar.MONTH) + 1;
    5. // 获取天数
    6. int day = c.get(Calendar.DAY_OF_MONTH);
  • set(int field, int value) 设置日期

    1. //设置月份为9月
    2. calendar.set(Calendar.MONTH, 10);
  • 日历的偏移:add(int field, int value)

    1. //偏移到上个月
    2. calendar.add(Calendar.MONTH, -1);

    5. 时间计算举例

    a. 计算两个时间的间隔

    1. public long getDaysInterval(Date date1, Date date2){
    2. long timeInterval = Math.abs(date1.getTime() - date2.getTime());
    3. long days = timeInterval / (1000*60*60*24);
    4. return days;
    5. }

    b. 比较两个时间的大小

    1. public boolean isEarilier(Date date1, Date date2) {
    2. return date1.getTime() < date2.getTime();
    3. }

    c. 得到上个月的date

    1. Calendar calendar = Calendar.getInstance();
    2. Date lastMonthDate = calendar.add(Calendar.MONTH, -1).getTime();

    d. 判断是否是闰年

    1. public boolean isLeepYear(int year) {
    2. Calendar calendar = Caleandar.getInstance();
    3. //将日历,设置到指定年的3月1日
    4. c.set(2088, 2, 1);
    5. //日历add方法,向前偏移1天
    6. c.add(Calendar.DAY_OF_MONTH, -1);
    7. //get方法获取天数
    8. int day = c.get(Calendar.DAY_OF_MONTH);
    9. return day==29;
    10. }