Java 日期常用API

1 日期与时间

1.1 Date

Date类代表当前所在系统的日期时间信息

public Date() 创建一个Date对象,代表的是系统当前此刻日期时间。

public long getTime() 返回从1970年1月1日 00:00:00走到此刻的总的毫秒数

请计算出当前时间往后走1小时121秒之后的时间是多少。

package Date;
​
import java.util.Date;
​
//使用date处理时间
public class Demo1 {
    public static void main(String[] args) {
        Date d = new Date(  );
        System.out.println( d );
​
        long time = d.getTime();
        System.out.println( time);
        // Sun Nov 13 10:45:08 CST 2022
        //  1668307508663
        //请计算出当前时间往后走1小时121秒之后的时间是多少
        System.out.println("*****************");
        Date d1 = new Date(  );
        System.out.println( d1);
​
        long time1 = System.currentTimeMillis();
        time1 +=(60*60+121)*1000;
//1
        Date d2 = new Date( time1 );
        System.out.println( d2);
//2
        d.setTime( time1 );
        System.out.println(d);
    }
}

1、日期对象如何创建,如何获取时间毫秒值? public Date(); public long getTime(); 2、时间毫秒值怎么恢复成日期对象 public Date(long time); public void setTime(long time);

2.1 SimpleDateFormat

代表简单日期格式化,可以用来把日期时间格式化成为我们想要的形式

package Date;
​
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.SimpleTimeZone;
​
public class Demo2 {
    public static void main(String[] args) {
        Date d = new Date(  );
        System.out.println( d );
        //格式化日期对象
        SimpleDateFormat sdf = new SimpleDateFormat( "yyyy年MM月dd日 HH:mm:ss EEE a" );
        //开始格式化日期对象
        String rs = sdf.format( d );
        System.out.println( rs );
        //格式化时间毫米值
        //121秒后时间
        long time1 = System.currentTimeMillis()+ 121*1000;
        String rs2 = sdf.format( time1 );
        System.out.println( rs2 );
​
​
​
    }
}

格式化方法

格式化方法说明
public final String format(Date date)将日期格式化成日期/时间字符串
public final String format(Object time)将时间毫秒值式化成日期/时间字符串

学会 SimpleDateFormat 解析字符串时间成为日期对象

package Date;
​
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
​
public class Demo3 {
    public static void main(String[] args) throws ParseException {
        //学会 SimpleDateFormat 解析字符串时间成为日期对象
        //计算2021.8.26.11.11.11 后2.14.49.6时间
        String dateStr = "2021年08月06日 11:11:11";
​
        //把字符串解析成日期对象
        SimpleDateFormat sdf = new SimpleDateFormat( "yyyy年MM月dd日 HH:mm:ss" );
        Date d = sdf.parse( dateStr );
        long time = d.getTime() + (2L*24*60*60 +14*60*60+49*60+6)*1000;
        //加L不会越界
        System.out.println( sdf.format( time ) );
​
​
    }
}

1、SimpleDateFormat代表什么,有什么作用? 简单日期格式化对象 可以把日期对象及时间毫秒值格式化成我们想要的字符串形式。 可以把字符串的时间形式解析成Date日期对象。 2、SimpleDateFormat的对象如何创建? public SimpleDateFormat(String pattern) 3、SimpleDateFormat格式化,以及解析时间的方法是怎么样的? public final String format(Date d):格式化日期对象 public final String format(Object time):格式化时间毫秒值 public Date parse(String source):解析字符串时间

需求 某购物网站举办秒杀活动,开始时间和结束时间如左图所示,当前活动结束后,系统记录到2位用户的付款时间分别如下: 小贾下单并付款的时间为:2020年11月11日 0:03:47 小皮下单并付款的时间为:2020年11月11日 0:10:11 规则:顾客的付款时间必须在秒杀时间之内,请判断出两位顾客是否秒杀成功。

package Date;
​
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
​
public class Test1 {
    public static void main(String[] args) throws ParseException {
​
        String startTime = "2021-11-11 00.00.00";
        String endTime = "2021-11-11 00.10.00";
​
        String xiaojia ="2021-11-11 00.03.47";
        String xiaopi ="2021-11-11 00.10.11";
​
        SimpleDateFormat sdf = new SimpleDateFormat( "yyyy年MM月dd日 HH:mm:ss" );
        Date d1 = sdf.parse( startTime );
        Date d2 = sdf.parse( endTime );
        Date d3 = sdf.parse( xiaojia );
        Date d4 = sdf.parse( xiaopi );
​
        if(d3.after(d1) && d3.before( d2 )){
            System.out.println("小贾成功");
        }else{
            System.out.println("小贾失败");
        }
        if(d4.after(d1) && d4.before( d2 )){
            System.out.println("小皮成功");
        }else{
            System.out.println("小皮失败");
        }
​
    }
}

2.1 Calendar

Calendar代表了系统此刻日期对应的日历对象。 Calendar是一个抽象类,不能直接创建对象。

方法名说明
public int get(int field)取日期中的某个字段信息。
public void set(int field,int value)修改日历的某个字段信息。
public void add(int field,int amount)为某个字段增加/减少指定的值
public final Date getTime()拿到此刻日期对象。
public long getTimeInMillis()拿到此刻时间毫秒值

注意:calendar是可变日期对象,一旦修改后其对象本身表示的时间将产生变化

1、Calendar如何去得到日历对象的?

调用方法 抽象类不能创造对象

public static Calendar getInstance() : 获取当前日历对象

package Date;
​
import java.util.Calendar;
import java.util.Date;
​
public class Demo4 {
    public static void main(String[] args) {
        //1. 取日期中的某个字段信息。
        Calendar cal = Calendar.getInstance();
        System.out.println( cal );
​
        //2. 修改日历的某个字段信息。
        int year = cal.get(Calendar.YEAR);
        System.out.println( year );
        int month= cal.get(Calendar.MONTH);
        System.out.println( month );
        int days = cal.get(Calendar.DAY_OF_YEAR);
        System.out.println( days );
        // 3. 为某个字段增加/减少指定的值 一般不修改
      //  cal.set( Calendar.HOUR,16 );
     //   System.out.println( cal );
        //64天后时间
        cal.add(Calendar.DAY_OF_YEAR,64);
​
        //4.  拿到此刻日期对象。
       Date d =  cal.getTime();
        System.out.println( d );
        //5. 拿到此刻时间毫秒值
        long time = cal.getTimeInMillis();
        System.out.println( time );
    }
}
//2022
//10
//317
//Mon Jan 16 11:46:33 CST 2023
//1673840793979
 

2 JDK8新增日期类

JDK8新增日期类

2.1LocalTime /LocalDate / LocalDateTime

方法名说明
public int geYear()获取年
public int getMonthValue()获取月份(1-12)
Public int getDayOfMonth()获取月中第几天乘法
Public int getDayOfYear()获取年中第几天
Public DayOfWeek getDayOfWeek()获取星期

2.2 Instant

Instant时间戳 JDK8获取时间戳特别简单,且功能更丰富。Instant类由一个静态的工厂方法now()可以返回当前时间戳。

Instant instant = Instant.now(); System.out.println("当前时间戳是:" + instant);

Date date = Date.from(instant); System.out.println("当前时间戳是:" + date);

instant = date.toInstant(); System.out.println(instant);

2.3 DateTimeFormatter

在JDK8中,引入了一个全新的日期与时间格式器DateTimeFormatter

2.4 Duration/Period

Period 在Java8中,我们可以使用以下类来计算日期间隔差异:java.time.Period 主要是 Period 类方法 getYears(),getMonths() 和 getDays() 来计算,只能精确到年月日。 用于 LocalDate 之间的比较。

2.5 ChronoUnit

ChronoUnit类可用于在单个时间单位内测量一段时间,这个工具类是最全的了,可以用于比较所有的时间单位

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张南辞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值