目录
1、Date
1、Date格式化工具——SimpleDateFormate用于时间的格式化
2、SimpleDateFormate中的常用方法
2、LocalDate与LocalTime
1、LocalDate的常用方法
2、LocalTime的创建、构造
3、LocalDate、LocalTime格式化工具——DateTimeFormatter
4、parse()与format()
3、calendar
4、时间戳
1、时间戳转换为自定义格式的时间字符串
1、时间戳转换为Date
5、时间间隔计算
1、yyyy-MM-dd HH:mm:ss(24小时制)
2、yyyy-MM-dd HH:mm:ss(12小时制)
3、yyyy-MM-dd HH:mm:ss.SSS(年-月-日 时:分:秒.毫秒)
format(Date date)方法实现Date数据、Calendar数据转换为指定格式的字符串
parse(String dateStr)方法将时间格式的String转化为Date数据
import java.text.SimpleDateFormat;
import java.util.Date;
public class demo {
public static void main(String[] args) {
Date d=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
System.out.println("今天的日期:"+df.format(d));
System.out.println("两天前的日期:" + df.format(new Date(d.getTime() - (long)2 * 24 * 60 * 60 * 1000)));
System.out.println("三天后的日期:" + df.format(new Date(d.getTime() + (long)3 * 24 * 60 * 60 * 1000)));
}
}
LocalDate无法包含时间,LocalTime无法包含日期,LocalDateTime才能同时包含时间和日期。
import java.text.ParseException;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
public class demo {
public static void main(String[] args) throws ParseException {
// 获取今天的日期
LocalDate today = LocalDate.now();
// 今天是本月几号
int dayOfMonth = today.getDayOfMonth();
// 今天是周几(返回的是个枚举类型,需要再getValue())
int dayOfWeek = today.getDayOfWeek().getValue();
// 今天是今年中的第几天
int dayOfYear = today.getDayOfYear();
// 根据字符串取:严格按照yyyy-MM-dd验证,02写成2都不行,如何想改变格式通过DateTimeFormatter实现
LocalDate endOfFeb = LocalDate.parse("2023-02-28");
// 取本月第1天
LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth());
// 取本月第3天
LocalDate secondDayOfThisMonth = today.withDayOfMonth(3);
// 取本月最后一天,不用计算是28,29,30还是31
LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth());
// 取下一天
LocalDate firstDayOfNextMonth = today.plusDays(1);
// 取2023年9月第一个周一
LocalDate firstMondayOf2023 = LocalDate.parse("2023-09-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
System.out.println(firstDayOfNextMonth);
}
}
import java.time.LocalDate;
import java.time.Period;
import java.time.ZoneId;
import java.util.Date;
public class demo {
public static void main(String[] args) {
LocalDate beginTime = LocalDate.now();
// 月份运算
LocalDate entTime = beginTime.plus(Period.ofMonths(6));
// LocalDate 转 Date
Date date = Date.from(beginTime.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
}
import java.time.LocalTime;
public class demo {
public static void main(String[] args) {
LocalTime now = LocalTime.now();
// 构造
LocalTime zero = LocalTime.of(0, 0, 0);
LocalTime mid = LocalTime.parse("12:00:00");
}
}
import java.text.ParseException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class demo {
public static void main(String[] args) throws ParseException {
LocalDate today = LocalDate.now();
DateTimeFormatter formatters1 = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
//formatters1 与 today 位置可以互换
String text = formatters1.format(today);
LocalTime now = LocalTime.now();
//formatters2 与 now 位置可以互换
DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("hh mm ss.SSS");
String midStr = mid.format(formatter2);
System.out.println(midStr);
}
}
parse调用 | format调用 | |
SimpleDateFormate | 1、创建SimpleDateFormate,确定格式 2、传入时间字符串,sdf.parse(timeStr) |
1、创建SimpleDateFormate,确定格式 2、sdf.format(date) |
LocalDate | LocalDate.parse(timeStr) 字符串格式严格按照yyyy-MM-dd验证 |
1、创建DateTimeFormatter,确定格式 2、dtf.format(dateStr) |
LocalTime | LocalTime.parse(timeStr) | 1、创建DateTimeFormatter,确定格式 2、dtf.format(timeeStr) |
getTime()获取时间,add()修改时间,get()获取指定部分时间
import java.util.Calendar;
public class demo {
public static void main(String[] args) {
// 使用默认时区和语言环境获得一个日历
Calendar cal = Calendar.getInstance();
Date nowTime = calendar.getTime();
calendar.add(Calendar.DATE, 5);
Date startTime = calendar.getTime();
// 赋值时年月日时分秒常用的6个值,注意月份下标从0开始,所以取月份要+1
System.out.println("年:" + cal.get(Calendar.YEAR));
System.out.println("月:" + (cal.get(Calendar.MONTH) + 1));
System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH));
System.out.println("时:" + cal.get(Calendar.HOUR_OF_DAY));
System.out.println("分:" + cal.get(Calendar.MINUTE));
System.out.println("秒:" + cal.get(Calendar.SECOND));
}
}
Unix时间戳(Unix timestamp)定义为从1970年01月01日00时00分00秒(UTC)起至现在经过的总秒数,是我们北京时间的1970年01月01日08时00分00秒
13位时间戳精确到毫秒,10位精确到秒
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
public class demo {
public static void main(String[] args) {
//获取当前毫秒级时间戳
Long time = System.currentTimeMillis();
System.out.println(time);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
//返回的是指定格式的string类型时间
String date = sdf.format(time);
System.out.println(date);
}
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
public class demo {
public static void main(String[] args) {
//获取当前毫秒级时间戳
Long time = System.currentTimeMillis();
Date date = new Date(time);
System.out.println(date);
}
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class demo {
public static void main(String[] args) throws ParseException {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
// 定义两个时间
String startTime = "1949-10-1 00:00:00.000";
String endTime = "2023-8-21 20:10:10.010";
// 将两个String类型的时间转换为Date类型,从而计算差值、parse()方法的作用是将String类型的时间解析为Date类型
Date d1 = df.parse(startTime);
Date d2 = df.parse(endTime);
System.out.println((((d2.getTime() - d1.getTime()) / (24 * 60 * 60 * 1000))) / 365 + "年");
// 以下总和为时间差
System.out.println((d2.getTime() - d1.getTime()) / (24 * 60 * 60 * 1000) + "天");
System.out.println((((d2.getTime() - d1.getTime()) / (60 * 60 * 1000)) % 24) + "小时");
System.out.println((((d2.getTime() - d1.getTime()) / 1000) % 60) + "分钟");
System.out.println(((d2.getTime() - d1.getTime()) / (60 * 1000)) % 60 + "秒");
System.out.println((((d2.getTime() - d1.getTime())) % 1000) + "毫秒");
}
}