常用日期API,万年历 日历api

大雄 626 2022-09-06

目录


1.日期与时间


1.1Date


1.2SimpleDateFormat


1.3Calendar


2.JDK8新增日期类


2.1概述,LocalTime / LocalDate / LocalDateTime


2.2Instant


2.3DateTimeFormatter


2.4Duration / Period(LocalDateTime / LocalDate)


2.5ChronoUnit


1.日期与时间

1.1Date

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


Date的构造器




Date的常用方法




 


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


public class DateDemo1 {

    public static void main(String[] args) {

        // 1、创建一个Date类的对象:代表系统此刻日期时间对象

        Date d = new Date();

        System.out.println(d);

 

        // 2、获取时间毫秒值

        long time = d.getTime();

        System.out.println(time);

//        long time1 = System.currentTimeMillis();

//        System.out.println(time1);

 

        System.out.println("----------------------------");

        // 1、得到当前时间

        Date d1 = new Date();

        System.out.println(d1);

 

        // 2、当前时间往后走 1小时  121s

        long time2 = System.currentTimeMillis();

        time2 += (60 * 60 + 121) * 1000;

 

        // 3、把时间毫秒值转换成对应的日期对象。

        // Date d2 = new Date(time2);

        // System.out.println(d2);

 

        Date d3 = new Date();

        d3.setTime(time2);

        System.out.println(d3);

 

    }

}


总结:


1、日期对象如何创建,如何获取时间毫秒值?


public  Date();

public long getTime();


2、时间毫秒值怎么恢复成日期对象?


public Date(long time);

public void setTime(long time);


1.2SimpleDateFormat

SimpleDateFormat类作用:可以去完成日期时间的格式化操作。


构造器




 格式化方法




import java.text.SimpleDateFormat;

import java.util.Date;

 

/**

    目标:SimpleDateFormat简单日期格式化类的使用

    格式化时间

    解析时间

 */

public class SimpleDateFormatDemo01 {

    public static void main(String[] args) {

        // 1、日期对象

        Date d = new Date();

        System.out.println(d);

 

        // 2、格式化这个日期对象 (指定最终格式化的形式)

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EEE a");

        // 3、开始格式化日期对象成为喜欢的字符串形式

        String rs = sdf.format(d);

        System.out.println(rs);

 

        System.out.println("----------------------------");

 

        // 4、格式化时间毫秒值

        // 需求:请问121秒后的时间是多少

        long time1 = System.currentTimeMillis() + 121 * 1000;

        String rs2 = sdf.format(time1);

        System.out.println(rs2);

 

        System.out.println("------------解析字符串时间,下个代码---------------");

    }

}


解析方法




 


格式化的时间形式的常用的模式对应关系如下:




 案例:请计算出 2021年08月06日11点11分11秒,往后走2天14小时49分06秒后的时间是多少。


import javax.xml.crypto.Data;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

 

public class SimpleDateFormatDemo2 {

    public static void main(String[] args) throws ParseException {

        // 目标: 学会使用SimpleDateFormat解析字符串时间成为日期对象。

        // 有一个时间 2021年08月06日 11:11:11 往后 2天 14小时 49分 06秒后的时间是多少。

        // 1、把字符串时间拿到程序中来

        String dateStr = "2021年08月06日 11:11:11";

 

        // 2、把字符串时间解析成日期对象(本节的重点):形式必须与被解析时间的形式完全一样,否则运行时解析报错!

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

        Date d = sdf.parse(dateStr);

 

        // 3、往后走2天 14小时 49分 06秒

        long time = d.getTime() + (2L*24*60*60 + 14*60*60 + 49*60 + 6) * 1000;

 

        // 4、格式化这个时间毫秒值就是结果

        System.out.println(sdf.format(time));

    }

}


总结:


1、SimleDateFormat可以格式化哪些时间形式?


Date日期对象,时间毫秒值。


2、SimpleDateFormat如何进行字符串时间的解析的?


通过一个方法: public Date parse(String source)。


得到一个字符串时间,调用SimpleDateFormat构造器其中时间格式必须与被解析字符串时间格式完全一致,最后使用public final String format(Date date)格式化时间。


1.3Calendar

Calendar概述


Calendar代表了系统此刻日期对应的日历对象。


Calendar是一个抽象类,不能直接创建对象。


Calendar日历类创建日历对象的方法:




Calendar常用方法




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


 


import javax.xml.crypto.Data;

import java.util.Calendar;

import java.util.Date;

 

/**

    目标:日历类Calendar的使用,可以得到更加丰富的信息。

    Calendar代表了系统此刻日期对应的日历对象。

    Calendar是一个抽象类,不能直接创建对象。

    Calendar日历类创建日历对象的语法:

        Calendar rightNow = Calendar.getInstance();

    Calendar的方法:

        1.public static Calendar getInstance(): 返回一个日历类的对象。

        2.public int get(int field):取日期中的某个字段信息。

        3.public void set(int field,int value):修改日历的某个字段信息。

        4.public void add(int field,int amount):为某个字段增加/减少指定的值

        5.public final Date getTime(): 拿到此刻日期对象。

        6.public long getTimeInMillis(): 拿到此刻时间毫秒值

    小结:

        记住。

 */

public class CalendarDemo{

    public static void main(String[] args) {

        // 1、拿到系统此刻日历对象

        Calendar cal = Calendar.getInstance();

        System.out.println(cal);

 

        // 2、获取日历的信息:public int get(int field):取日期中的某个字段信息。

        int year = cal.get(Calendar.YEAR);

        System.out.println(year);

 

        int mm = cal.get(Calendar.MONTH) + 1;

        System.out.println(mm);

 

        int days = cal.get(Calendar.DAY_OF_YEAR) ;

        System.out.println(days);

 

        // 3、public void set(int field,int value):修改日历的某个字段信息。

        // cal.set(Calendar.HOUR , 12);

        // System.out.println(cal);

 

        // 4.public void add(int field,int amount):为某个字段增加/减少指定的值

        // 请问64天后是什么时间

        cal.add(Calendar.DAY_OF_YEAR , 64);

        cal.add(Calendar.MINUTE , 59);

 

        //  5.public final Date getTime(): 拿到此刻日期对象。

        Date d = cal.getTime();

        System.out.println(d);

 

        //  6.public long getTimeInMillis(): 拿到此刻时间毫秒值

        long time = cal.getTimeInMillis();

        System.out.println(time);

 

    }

}


2.JDK8新增日期类

2.1概述,LocalTime / LocalDate / LocalDateTime

概述:从Java 8开始,java.time包提供了新的日期和时间API,主要涉及的类型有:




 


新增的API严格区分了时刻、本地日期、本地时间,并且,对日期和时间进行运算更加方便。


其次,新API的类型几乎全部是不变类型(和String的使用类似),可以放心使用不必担心被修改。


LocalDate、LocalTime、LocalDateTime:


他们分别表示日期,时间,日期时间对象,他们的类的实例是不可变的对象。


他们三者构建对象和API都是通用的。


构建对象的方式如下:




LocalDate、LocalTime、LocalDateTime获取信息的API:




 


import java.time.LocalDate;

import java.time.Month;

 

public class Demo01LocalDate {

    public static void main(String[] args) {

        // 1、获取本地日期对象。

        LocalDate nowDate = LocalDate.now();

        System.out.println("今天的日期:" + nowDate);//今天的日期:

 

        int year = nowDate.getYear();

        System.out.println("year:" + year);

 

 

        int month = nowDate.getMonthValue();

        System.out.println("month:" + month);

 

        int day = nowDate.getDayOfMonth();

        System.out.println("day:" + day);

 

        //当年的第几天

        int dayOfYear = nowDate.getDayOfYear();

        System.out.println("dayOfYear:" + dayOfYear);

 

        //星期

        System.out.println(nowDate.getDayOfWeek());

        System.out.println(nowDate.getDayOfWeek().getValue());

 

        //月份

        System.out.println(nowDate.getMonth());//AUGUST

        System.out.println(nowDate.getMonth().getValue());//8

 

        System.out.println("------------------------");

        LocalDate bt = LocalDate.of(1991, 11, 11);

        System.out.println(bt);//直接传入对应的年月日

        System.out.println(LocalDate.of(1991, Month.NOVEMBER, 11));//相对上面只是把月换成了枚举

    }

}


修改相关的API:


LocalDateTime 综合了 LocalDate 和 LocalTime 里面的方法,所以下面只用 LocalDate 和 LocalTime 来举例。


这些方法返回的是一个新的实例引用,因为LocalDateTime 、LocalDate 、LocalTime 都是不可变的。




 


import java.time.LocalDate;

import java.time.LocalTime;

import java.time.MonthDay;

 

public class Demo04UpdateTime {

    public static void main(String[] args) {

        LocalTime nowTime = LocalTime.now();

        System.out.println(nowTime);//当前时间

        System.out.println(nowTime.minusHours(1));//一小时前

        System.out.println(nowTime.minusMinutes(1));//一分钟前

        System.out.println(nowTime.minusSeconds(1));//一秒前

        System.out.println(nowTime.minusNanos(1));//一纳秒前

 

        System.out.println("----------------");

 

        System.out.println(nowTime.plusHours(1));//一小时后

        System.out.println(nowTime.plusMinutes(1));//一分钟后

        System.out.println(nowTime.plusSeconds(1));//一秒后

        System.out.println(nowTime.plusNanos(1));//一纳秒后

 

        System.out.println("------------------");

        // 不可变对象,每次修改产生新对象!

        System.out.println(nowTime);

 

        System.out.println("---------------");

        LocalDate myDate = LocalDate.of(2018, 9, 5);

        LocalDate nowDate = LocalDate.now();

 

        System.out.println("今天是2018-09-06吗? " + nowDate.equals(myDate));//今天是2018-09-06吗? false

        System.out.println(myDate + "是否在" + nowDate + "之前? " + myDate.isBefore(nowDate));//2018-09-05是否在2018-09-06之前? true

        System.out.println(myDate + "是否在" + nowDate + "之后? " + myDate.isAfter(nowDate));//2018-09-05是否在2018-09-06之后? false

 

        System.out.println("---------------------------");

        // 判断今天是否是你的生日

        LocalDate birDate = LocalDate.of(1996, 8, 5);

        LocalDate nowDate1 = LocalDate.now();

 

        MonthDay birMd = MonthDay.of(birDate.getMonthValue(), birDate.getDayOfMonth());

        MonthDay nowMd = MonthDay.from(nowDate1);

 

        System.out.println("今天是你的生日吗? " + birMd.equals(nowMd));//今天是你的生日吗? false

    }

}


2.2Instant

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


时间戳是包含日期和时间的,与java.util.Date很类似,事实上Instant就是类似JDK8 以前的Date


Instant和Date这两个类可以进行转换。


import java.time.Instant;

import java.time.LocalDate;

import java.time.ZoneId;

import java.util.Date;

 

public class Demo05Instant {

    public static void main(String[] args) {

        // 1、得到一个Instant时间戳对象

        Instant instant = Instant.now();

        System.out.println(instant);

 

        // 2、系统此刻的时间戳怎么办?

        Instant instant1 = Instant.now();

        System.out.println(instant1.atZone(ZoneId.systemDefault()));

 

        // 3、如何去返回Date对象

        Date date = Date.from(instant);

        System.out.println(date);

 

        Instant i2 = date.toInstant();

        System.out.println(i2);

    }

}


2.3DateTimeFormatter

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


正反都能调用format方法。


import java.time.LocalDateTime;

import java.time.format.DateTimeFormatter;

public class Demo06DateTimeFormat {

    public static void main(String[] args) {

        // 本地此刻  日期时间 对象

        LocalDateTime ldt = LocalDateTime.now();

        System.out.println(ldt);

 

        // 解析/格式化器

        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss EEE a");

        // 正向格式化

        System.out.println(dtf.format(ldt));

        // 逆向格式化

        System.out.println(ldt.format(dtf));

 

        // 解析字符串时间

        DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        // 解析当前字符串时间成为本地日期时间对象

        LocalDateTime ldt1 = LocalDateTime.parse("2019-11-11 11:11:11" ,  dtf1);

        System.out.println(ldt1);

        System.out.println(ldt1.getDayOfYear());

    }

}


2.4Duration / Period(LocalDateTime / LocalDate)

Period:


在Java8中,我们可以使用以下类来计算日期间隔差异:java.time.Period


主要是 Period 类方法 getYears(),getMonths() 和 getDays() 来计算,只能精确到年月日。


用于 LocalDate 之间的比较。


import java.time.LocalDate;

import java.time.Period;

 

public class Demo07Period {

    public static void main(String[] args) {

        // 当前本地 年月日

        LocalDate today = LocalDate.now();

        System.out.println(today);//

 

        // 生日的 年月日

        LocalDate birthDate = LocalDate.of(1998, 10, 13);

        System.out.println(birthDate);

 

        Period period = Period.between(birthDate, today);//第二个参数减第一个参数

 

        System.out.println(period.getYears());

        System.out.println(period.getMonths());

        System.out.println(period.getDays());

    }

}


Duration:


在Java8中,我们可以使用以下类来计算时间间隔差异:java.time.Duration。


提供了使用基于时间的值测量时间量的方法。


用于 LocalDateTime 之间的比较。也可用于 Instant 之间的比较。


import java.time.Duration;

import java.time.LocalDateTime;

 

public class Demo08Duration {

    public static void main(String[] args) {

        // 本地日期时间对象。

        LocalDateTime today = LocalDateTime.now();

        System.out.println(today);

 

        // 出生的日期时间对象

        LocalDateTime birthDate = LocalDateTime.of(2021,8

                ,06,01,00,00);

 

        System.out.println(birthDate);

 

        Duration duration = Duration.between(  birthDate , today);//第二个参数减第一个参数

 

        System.out.println(duration.toDays());//两个时间差的天数

        System.out.println(duration.toHours());//两个时间差的小时数

        System.out.println(duration.toMinutes());//两个时间差的分钟数

        System.out.println(duration.toMillis());//两个时间差的毫秒数

        System.out.println(duration.toNanos());//两个时间差的纳秒数

    }

}


总结:


1、 Duration:  用于计算两个“时间”间隔。

2、 Period:      用于计算两个“日期”间隔。


2.5ChronoUnit

java.time.temporal.ChronoUnit


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

万年历日历api

接口名称:日历api

接口平台:聚合数据

获取当天的详细信息

接口地址:http://japi.juhe.cn/calendar/day

支持格式:json

请求方式:get post

请求示例:http://japi.juhe.cn/calendar/day?date=2015-1-1&key=您申请的appKey

接口备注:根据传入日期返回当天详细信息

JSON返回示例:

{

"error_code": 0,

"reason": "Success",

"result": {

"data": {

"holiday": "元旦",//假日

"avoid": "破土.安葬.行丧.开生坟.",//忌

"animalsYear": "马",//属相

"desc": "1月1日至3日放假调休,共3天。1月4日(星期日)上班。",//假日描述

"weekday": "星期四",//周几

"suit": "订盟.纳采.造车器.祭祀.祈福.出行.安香.修造.动土.上梁.开市.交易.立券.移徙.入宅.会亲友.安机械.栽种.纳畜.造屋.起基.安床.造畜椆栖.",//宜

"lunarYear": "甲午年",//纪年

"lunar": "十一月十一",//农历

"year-month": "2015-1",//年份和月份

"date": "2015-1-1"//具体日期

}

}

}

获取近期假期

接口地址:http://japi.juhe.cn/calendar/month

请求示例:http://japi.juhe.cn/calendar/month?year-month=2015-1&key=您申请的appKey

接口备注:根据传入的月份返回近期的假期列表

JSON返回示例:


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:nyoj 1236 挑战密室(河南省第八届acm程序设计大赛)
下一篇:给大家推荐一个股票数据API接口平台,股票、期货交易及行情等API接口汇总
相关文章

 发表评论

暂时没有评论,来抢沙发吧~