Java 日期相关的几种API

日期其实基本每个项目必用,但API比较多又杂乱,懒得记忆,这里就整理一下做个记录

目录

java.util.Date(处理麻烦,不推荐)

java.sql.Date(适用于Sql)

 java.util.Calendar(线程不安全)

Java 8新版的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());
    }
}

输出:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值