Date类重写了toString方法输出的不再是一个对象的内存地址, 默认的输出格式Thu Mar 05 10:51:06 CST 2020(这个格式对我们不友好 , 需要对日期格式化)
方法名 | 功能 |
---|---|
Date() | 获取系统当前时间对象(精确到毫秒的系统当前时间) |
Date(long time) | 通过指定毫秒数得到其对应的时间对象 , 默认从1970-01-01 00:00:00 000开始 , 但我们是北京时间 , 所以从1970-01-01 08:00:00 000开始 |
public class DateTest01 {
public static void main(String[] args) throws Exception {
// 获取系统当前时间对象(精确到毫秒的系统当前时间)
Date nowTime = new Date();
// 输出格式: Thu Mar 05 10:51:06 CST 2020
System.out.println(nowTime);
// 通过指定毫秒数得到其对应的时间对象
Date time = new Date(1);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
String strTime = sdf.format(time);
// 北京是东8区差8个小时,1970-01-01 08:00:00 001
System.out.println(strTime);
// 获取昨天的此时的时间
Date time2 = new Date(System.currentTimeMillis() - 1000 * 60 * 60 * 24);
String strTime2 = sdf.format(time2);
// 2020-03-04 11:44:14 829
System.out.println(strTime2);
}
}
SimpleDateFormat专门负责日期格式化的对象 , 可以将Date对象按照指定的规范格式化为字符串
方法名 | 功能 |
---|---|
SimpleDateFormat(String str) | 创建一个SimpleDateFormat指定日期转换的格式 , 除了y M d H m s S这些字符不能随便写之外,剩下的符号格式可随意组织 |
String format(Date) | 将日期对象按照指定的格式进行转换 , 返回一个字符串 |
Date parse(time) | 将日期字符串String转换成Date类型 , 字符串的日期格式和SimpleDateFormat对象指定的日期格式要一致 |
将日期类型按照指定的格式进行转换:Date转换成具有一定格式的日期字符串String(格式化三要素日期对象 , 格式化对象 , 对日期进行格式化)
// 获取系统当前时间(精确到毫秒的系统当前时间)
Date nowTime = new Date();
//按照规范规定转换的格式 , 除了y M d H m s S这些字符不能随便写之外,剩下的符号格式可随意组织
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
//SimpleDateFormat sdf = new SimpleDateFormat("yy/MM/dd HH:mm:ss");
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年 MM 月 dd 日 hh:mm:ss E");
//将日期对象按照指定的格式进行转换
String nowTimeStr = sdf.format(nowTime);
System.out.println(nowTimeStr);
将日期字符串String转换成Date类型(格式化三要素日期字符串 , 格式化对象 , 通过字符串得到日期对象)
//指定一个日期字符串
String time = "2008-08-08 08:08:08 888";
//SimpleDateFormat sdf2 = new SimpleDateFormat("格式不能随便写,要和日期字符串格式相同");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
//将日期字符串String转换成Date类型
Date dateTime = sdf2.parse(time);
//Fri Aug 08 08:08:08 CST 2008 , Date重写的toString方法没有显示毫秒
System.out.println(dateTime);
Calendar 是一个抽象类并且构造器是私有的 , 无法直接创建对象 ,需要通过静态的getInstance()方法来获取实例
//创建日历类对象
Calendar c = Calendar.getInstance();
//toString 方法默认以属性="值"的形式输出时间的信息
System.out.println("c=" + c);
// 获取日期对象的某个字段
System.out.println("年:" + c.get(Calendar.YEAR));
System.out.println("月:" + (c.get(Calendar.MONTH) + 1));//返回月的时候,是按照0开始编号 需要我们加1
System.out.println("日:" + c.get(Calendar.DAY_OF_MONTH));
System.out.println("小时:" + c.get(Calendar.HOUR));
System.out.println("分钟:" + c.get(Calendar.MINUTE));
System.out.println("秒:" + c.get(Calendar.SECOND));
//Calender 没有专门的格式化方法,所以需要程序员自己来组合显示
System.out.println(c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" +c.get(Calendar.DAY_OF_MONTH) +" " + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + ":" + c.get(Calendar.SECOND) );
Calendar 类一定也重写了toString 方法输出的不再是一个对象的内存地址, 默认以属性="值"的形式输出日期对象的信息
方法名 | 功能 |
---|---|
static Calendar getInstance() | 返回一个日期对象 |
get(日期字段) | 获取日期对象中的某个年月日字段的信息 ,月是按 0 开始编号 , 需要我们加 1,星期日对应的编号是1,星期一对应的编号是2 |
set(Calendar.YEAR/MONTH/DAY_OF_MONTH , 年月日) | 单独设置某个日期字段的信息 |
set(年,月,日) | 直接设置多个日期字段的信息 |
compareTo(Calendar c) | 比较两个时间值对象,拿前面的减去后面的 |
add(年/月/日, int amount) | 将指定的日历字段增加或减去 |
1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
// Calendar是一个抽象类并且构造器是私有的 , 无法直接创建对象
Calendar calendar =Calendar.getInstance();
for(int year=1999;year<10000;year+=100) {
//月是按0开始编号,11表示12月
calendar.set(year,11,31);
//输入一个日期可以得到其对应星期几, 星期日对应的编号是1
if(calendar.get(Calendar.DAY_OF_WEEK)==1) {
System.out.println(year);
break;
}
}
}
}
使用 now() 方法都可以获取 LocalDate(含有年月日) , LocalTime(含有时分秒) , LocalDateTime(含有年月日时分秒)的时间对象
LocalDateTime类一定也重写了toString 方法输出的不是一个对象的内存地址 , 日期默认的输出格式2021-03-04T18:03:12.082(一般需要日期格式化)
方法名 | 功能 |
---|---|
static LocalDateTime now() | 返回当前日期的时间对象(含有年月日时分秒) |
getYear() | 获取日期对象中的年份 |
getMonth() | 获取日期对象中的月份(月份的英文) |
getMonthValue() | 获取日期对象中的月份(月份的数字) |
getDayOfMonth() | 获取日期对象中的天 |
getHour() | 获取日期对象中的时 |
getMinute() | 获取日期对象中的分 |
getSecond() | 获取日期对象中的秒 |
LocalDateTime plusDays(int) | 在当前时间基础上加多少天(年月日时分秒同理) |
LocalDateTime minusMinutes(int) | 对当前时间的基础上减多少分钟(年月日时分秒同理) |
// 返回当前日期的时间对象(含有年月日时分秒)
LocalDateTime ldt = LocalDateTime.now();
// 返回当前日期的时间对象(含有年月日)
LocalDate now = LocalDate.now();
// 返回当前日期的时间对象(含有时分秒)
LocalTime now2 = LocalTime.now();
System.out.println(ldt);// 2021-03-04T8:03:12.082
// 获取日期对象的某个字段
System.out.println("年=" + ldt.getYear());
System.out.println("月=" + ldt.getMonth());
System.out.println("月=" + ldt.getMonthValue());
System.out.println("日=" + ldt.getDayOfMonth());
System.out.println("时=" + ldt.getHour());
System.out.println("分=" + ldt.getMinute());
System.out.println("秒=" + ldt.getSecond());
// 看看90天后的时间
LocalDateTime localDateTime = ldt.plusDays(90);
System.out.println("90天后=" + localDateTime);
// 看看3456分钟前的时间
LocalDateTime localDateTime2 = ldt.minusMinutes(3456);
System.out.println("3456分钟前=" + localDateTime2);
方法名 | 功能 |
---|---|
static DateTimeFormatter ofPattern(String str) | 创建一个指定日期转换格式的对象 , 除y M d H m s S这些字符不能随便写之外,剩下的符号格式可随意组织 |
String format( LocalDateTime ) | 将日期对象按照指定的格式进行转换 , 返回一个字符串 |
将日期对象转换成指定格式的日期字符串String(格式化三要素日类型期对象 , 格式化对象 , 调用format方法对日期进行格式化)
// 返回当前日期的时间对象(含有年月日时分秒)
LocalDateTime ldt = LocalDateTime.now();
// 创建 DateTimeFormatter 对象对日期进行格式化
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format = dateTimeFormatter.format(ldt);
System.out.println("格式化的日期=" + format);
Date和Instant的相互转换
方法名 | 功能 |
---|---|
static Instant now() | 获取当前时间戳对应的时间对象 (UTC时区) |
static Date from(Instant) | 把 Instant 转成 Date |
Instant Instant() | 把 date 转成 Instant 对象 |
public static void main(String[] args) {
// 获取表示当前时间戳对应的时间对象
Instant now = Instant.now();
System.out.println(now);
// Instant转成Date
Date date = Date.from(now);
// Date转成Instant 对象
Instant instant = date.toInstant();
}