Java 日期类
第一代日期类
- Date, 精确到毫秒, 代表特定的瞬间
- SimpleDateFormat, 允许进行格式化
- 应用实例, Date_.java
date.getTime()
默认的输出格式是国外的, 需要格式转换. 用SimpleDateFormat指定输出的形式
用API手册, 比上网找博客要好用得多.
package com.zhx.date_;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author 朱洪曦
* @version 1.0
*/
public class Date01 {
public static void main(String[] args) throws ParseException {
Date date = new Date();
Date date1 = new Date(1234535745);
System.out.println(date.getTime());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
String format = sdf.format(date1);
System.out.println(format);
// 可以把格式化字符串转成Date
String s = "1996年01月01日 10:20:30 星期一";
Date parse = sdf.parse(s);
System.out.println(sdf.format(parse));
}
}
第二代日期类
- 主要就是Calendar类.
Calendar
是抽象类, 为特定瞬间与一组日历字段的转换提供了方法, 并为操作日历字段提供了一些方法.- 构造器是私有的, 通过getInstance获取实例, 提供了大量的方法和字段
- 其中Calendar.MONTH从0开始
第三代日期类
前两代的不足, Calender的问题
- 日期和时间应该是不可变的
- 偏移性, 月份从0开始
- 格式化: Calender不能格式化
- 不是线程安全; 不能处理闰秒(每两天多出1秒)
第三代常用方法
- LocalDate(日期), LocalTime(时间), LocalDateTime(日期时间)
- LocalDateTime.now() 返回表示当前日期时间的对象
package com.zhx.date_;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @author 朱洪曦
* @version 1.0
*/
public class LocalDate_ {
public static void main(String[] args) {
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);
// ldt.getYear()
// ldt.getMonth()
// ldt.getSecond()
System.out.println("年 = " + ldt.getYear());
System.out.println("月 = " + ldt.getMonth());
System.out.println("月 = " + ldt.getMonthValue());
LocalDate now = LocalDate.now();
System.out.println(now);
}
}
- 使用 DateTimeFormatter 对时间进行格式化
时间戳
可以在时间戳和Date之间转换
Date date = Date.from(instant)
Instant instant = date.toInstant();
课后练习
指定反转字符串
package com.zhx.date_;
/**
* @author 朱洪曦
* @version 1.0
*/
public class Homework01 {
public static void main(String[] args) {
String str = "abcdef";
System.out.println(reverse(str, 1, 4));
}
public static String reverse(String str, int start, int end) {
StringBuilder builder = new StringBuilder(str);
while (start < end) {
char tmp = builder.charAt(start);
builder.replace(start, start + 1, "" + builder.charAt(end));
builder.replace(end, end + 1, "" + tmp);
start += 1;
end -= 1;
}
return builder.toString();
}
}