日期其实基本每个项目必用,但API比较多又杂乱,懒得记忆,这里就整理一下做个记录
目录
java.util.Date(处理麻烦,不推荐)
java.util.Date属于旧版的日期操作,由于类型转换很麻烦,实用性较差,已经不建议被使用了。
获取当前时间的基本操作。
获取的Date是CST类型时间,需要转换为yyyy-MM-dd HH:mm:ss 类型
String s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
System.out.println(s);
将时间戳转换为时间:
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(System.currentTimeMillis());
String now = simpleDateFormat.format(date);
System.out.println(now);
java.sql.Date(适用于Sql)
java.sql面向的时数据库sql相关操作所需时间,主要包含三个日期相关的。
- java.sql.Date:只表示日期
- java.sql.Time:只表示时间
- java.sql.Timestamp:表示日期 + 时间
用法:
import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
public class Test {
public static void main(String[] args) {
Date date = new Date(System.currentTimeMillis());
System.out.println(date);
Time time = new Time(System.currentTimeMillis());
System.out.println(time);
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
System.out.println(timestamp);
}
}
输出:
java.util.Calendar(线程不安全)
Calendar的的出现弥补了java.util.Date操作不方便的缺陷,所以应用范围还是比较广的,虽然我觉得使用起来还是有些不方便。但Calendar有个唯一的缺点,就是是线程不安全的,所以我个人也不建议使用。
//初始化
Calendar cal = Calendar.getInstance();//得到当前时间
一些方法我就不写测试了,网上很多,我随便转了一篇(https://www.cnblogs.com/jpfss/p/10455540.html)
Calendar cal = Calendar.getInstance();//得到当前时间
cal.setTimeInMillis(0);//转换成格林威治时间
3、获取值
cal.get(Calendar.YEAR);//年
cal.get(Calendar.MONTH) + 1;//月(必须要+1)
cal.get(Calendar.DATE);//日
cal.get(Calendar.HOUR_OF_DAY);//时
cal.get(Calendar.MINUTE);//分
cal.get(Calendar.SECOND);//秒
cal.get(Calendar.DAY_OF_WEEK);//星期(Locale.ENGLISH情况下,周日是1,剩下自己推算)
如果拿时间不是为了计算而是展示出来,肯定用SimpleDateFormart了,模式为yyyy-MM-dd HH:mm:ss
4、设置值
cal.set(2013, 5, 4, 13, 44, 51);//年月日时分秒(月份0代表1月)
cal.set(Calendar.YEAR, 2014);//年
cal.set(Calendar.MONTH, 7);//月(月份0代表1月)
cal.set(Calendar.DATE, 11);//日
cal.set(Calendar.HOUR_OF_DAY, 15);//时
cal.set(Calendar.MINUTE, 33);//分
cal.set(Calendar.SECOND, 32);//秒
5、运算值
cal.add(Calendar.YEAR, 1);//年
cal.add(Calendar.MONTH, 1);//月
cal.add(Calendar.DATE, 1);//日
cal.add(Calendar.HOUR_OF_DAY, -1);//时
cal.add(Calendar.MINUTE, 1);//分
cal.add(Calendar.SECOND, 1);//秒
cal.add(Calendar.DATE, 7);//周
Java 8新版的API(推荐使用)
LocalDate 、LocalTime 、LocalDateTime 军能保证线程安全,且操作更为简洁直观。
LocalDate 提供获取年月日
import java.time.LocalDate;
public class Test {
public static void main(String[] args) {
// 创建 LocalDate,获取当前年月日
LocalDate localDate = LocalDate.now();
LocalDate localDate1 = LocalDate.of(2021, 2, 2); // 构造指定的年月日
// 获取年、月、日、星期几
System.out.println("完整日期:"+localDate);
System.out.println("年:"+localDate.getYear());
System.out.println("月:"+localDate.getMonth().getValue());//getMonth()是获取月份的英文名称,getValue()是获取数字
System.out.println("日:"+localDate.getDayOfMonth());
System.out.println("星期:"+localDate.getDayOfWeek().getValue());//getDayOfWeek()是获取星期的英文名称,getValue()是获取数字
}
}
输出:
LocalTime 提供获取时分秒
import java.time.LocalTime;
public class Test {
public static void main(String[] args) {
// 创建 LocalTime
LocalTime localTime = LocalTime.now();
LocalTime localTime1 = LocalTime.of(11, 11, 11);//构建指定的时分秒
// 获取时、分、秒
System.out.println("完整时间:"+localTime);
System.out.println("时:"+localTime.getHour());
System.out.println("分:"+localTime.getMinute());
System.out.println("秒:"+localTime.getSecond());
System.out.println("毫微秒:"+localTime.getNano());
}
}
输出(注意,并不会在前面加0):
LocalDateTime 提供获取年月日时分秒,相当于 LocalDate + LocalTime
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.Month;
public class Test {
public static void main(String[] args) {
// 创建 LocalDateTime
LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime localDateTime1 = LocalDateTime.of(1999, Month.FEBRUARY, 2, 14, 46, 56,111);//构建指定的时间
LocalDateTime localDateTime2 = LocalDateTime.of(LocalDate.now(), LocalTime.now());//通过localDate和localTime组合时间
LocalDateTime localDateTime3 = LocalDate.now().atTime(LocalTime.now());//将Time添加到Date的组合方法
LocalDateTime localDateTime4 = LocalTime.now().atDate(LocalDate.now());//将Date添加到Time
System.out.println(localDateTime);
System.out.println(localDateTime1);
System.out.println(localDateTime2);
System.out.println(localDateTime3);
System.out.println(localDateTime4);
// 获取LocalDate
LocalDate localDate = localDateTime.toLocalDate();
// 获取LocalTime
LocalTime localTime = localDateTime.toLocalTime();
// 获取年、月、日、时、分、秒
System.out.println("年:"+localDateTime.getYear());
System.out.println("月:"+localDateTime.getMonth().getValue());//getMonth()是获取月份的英文名称,getValue()是获取数字
System.out.println("日:"+localDateTime.getDayOfMonth());
System.out.println("星期:"+localDateTime.getDayOfWeek().getValue());//getDayOfWeek()是获取星期的英文名称,getValue()是获取数字
System.out.println("时:"+localDateTime.getHour());
System.out.println("分:"+localDateTime.getMinute());
System.out.println("秒:"+localDateTime.getSecond());
}
}
输出: