日期和时间API

目录

Date类

1.什么是Date类

2. 为什么需要Date类

3. Date类演示

SimpleDateFormat类

将Date对象转换为字符串

将字符串转换为Date对象

Calendar类

Calendar对象获取日期

Calendar对象设置日期

Calendar日期计算


Date类

1.什么是Date类

java.util包中提供了Date类来封装当前的日期和时间,是距离一个固定时间点的毫秒数(long) 表示一个特定的时间点,Date类提供了两个构造函数来实例化Date对象

Date(); //使用当前的日期和时间来初始化对象
Date(long millis); //这个参数是从1970年1月1号到当前时间为止的毫秒数

2. 为什么需要Date类

有了Date类才能准确的表示时间或者日期

3. Date类演示

package cn.text.day01;
​
import java.util.Date;
​
/**
 * java.util.Date
 * Date中的每一个实例用于表示一个具体的时间,内部维护了一个long值<br>
 * 这个值表示UTC时间,也就是公元1970年到Date表示的时间所经过的毫秒值<br>
 *
 */
public class DateDemo {
    public static void main(String[] args) {
        //Thu Jan 21 20:33:57 CST 2021
        //默认创建出来表示系统当前的日期以及时间信息
        Date date  =new Date();
        System.out.println(date);//Date重写了toString,用于显示表示的日期和时间
        /*
         * getTime() 这个方法用于获取一个Date对象所表示的时间点
         * 返回的是一个long值
         * 表示该时间点距离1970年1月1号之间的毫秒值
         * 和System.currentTimeMillis();
         */
        long time=date.getTime();
        System.out.println(time);
        time=System.currentTimeMillis();
        System.out.println(time);
        /*
         * setTime(long time); 对date 设置一个long值表示该日期
         */
        //输出明天此时此刻的日期和时间
//      time =time+1000*60*60*24;
        date.setTime(time);
        System.out.println(date);
        
        //Date对象的很多方法都是过时的方法,不推荐使用
        //获得年(从1900年开始计时)
        int year=date.getYear()+1900;
        //获得月(获得的月份数真实月份少1)
        int month=date.getMonth()+1;
        //获得日
        int date1 = date.getDate();
        //获得时
        int hour = date.getHours();
        //获得分
        int minute = date.getMinutes();
        //获得秒
        int second = date.getSeconds();
        //获得星期
        int day = date.getDay();
        System.out.println(year+"年"+month+"月"+date1+"号"+hour+"时"+minute+"分"+second+"秒"+"星期"+day);
    }


SimpleDateFormat类

SimpleDateFormat类是一个与语言环境有关的方式来格式化和解析日期的具体类,他允许进行格式化(日期--文本),解析(文本--日期)

日期模式匹配字符串

字符---------含义-------实例

y---------年-------yyyy年-->2018年 yy--18年

M--------月-----MM月----09月:M--9月

d---------日----dd日---->21日;d日--6日

E---------星期

a----AM(上午)PM(下午)

H----24小时制

h-----12小时制

m---分

s--秒

将Date对象转换为字符串

package cn.text.day01;
​
import java.text.SimpleDateFormat;
import java.util.Date;
​
/**
 * java.text.SimpleDateFormat
 * 这个类允许按照一个给定的日期格式在Date和String之间相互转换
 * @author Administrator
 * 将日期格式化为字符串
 *
 */
public class SimpleDateFormatTest {
    public static void main(String[] args) {
        Date now  = new Date();
        System.out.println("当前时间:"+now);
        /**
         * 2021-01-21 21:19:02
         * 2021--yyyy
         * 01--MM
         * 21--dd
         * 21:19:02 HH:mm:ss
         */
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        /**
         * String format(Date date);
         * 将给定的Date表示的日期按照当前的SimpleDateFormat指定的格式转换为字符串
         */
        String now1=sdf.format(now);
        System.out.println("当前时间:"+now1);
        
    }
​
}


将字符串转换为Date对象

package cn.text.day01;
​
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
​
/**
 * 使用simpleDateFormat类将字符串解析为日期类
 * 将给定的字符串按照当前SimpleDateFormat指定的日期格式
 * 解析为一个Date对象来实际表示该日期类型
 * 注意:字符串内容部可控,可能会发生异常
 *
 */
public class SimpleDateFormat_parse {
    public static void main(String[] args) throws ParseException {
        String date = "2021-01-21 21:28:22";
        //SimpleDateFormat构造中的日期格式要和字符串str日期格式匹配
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //调用parse方法将日期字符串转换为Date类的对象
        Date now=sdf.parse(date);
        System.out.println("当前时间:"+now);
    }
}

练习

package cn.text.day01;
​
​
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
​
/**
 * 程序启动后,要求用户在控制台输入自己的生日
 * 格式为: yyyy-MM-dd 然后经过程序计算
 * 输出到今天为止一共活了多少天
 * 然后再经过计算,输入其生日到10000天的纪念日
 *
 *
 */
public class DateTest {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您的生日");
        String Line = sc.nextLine();
        //使用SimpleDateFormat将字符串转换为日期
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //生日的Date对象
        Date birth = sdf.parse(Line);
        //今天的日期
        Date now = new Date();
        //计算毫秒差
        long time = now.getTime()-birth.getTime();
        //将毫秒换算成天
        time = time/1000/60/60/24;
        System.out.println("恭喜您,一共活了"+time+"天!请继续保持");
        
        
        //算出出生10000天的纪念日是那天
        time  = birth.getTime(); //获得生日的时间偏移量
        //在生日的偏移量上加10000天作为纪念日
        time = time+1000L*60*60*24*10000;
        Date date = new Date(time);
        //将Date对象转换为字符串对象
        Line = sdf.format(date);
        System.out.println("您出生10000天的纪念日为:"+Line);         
    }
}

Calendar类

Java.util.Calendar类 用于封装日历信息,器主要的作用在于解压对时间进行运行



package cn.text.day01;
​
import java.util.Calendar;
import java.util.Date;
​
/**
 * java.util.Calendar
 * 日历类,用于计算时间,操作时间使用
 * Calendar类是一个抽象类,只规定了操作时间相关的方法的定义,并没有具体的实现
 * 常用的实现类:GregorianCalender类
 *
 */
public class CalendarDemo {
    public static void main(String[] args) {
        //Calendar提供了一个静态方法getInstance
        //这个方法可以根据当前系统所在地区返回一个合适的日历实现类
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar.getClass().getName());
        /**
         * Calendar--Date
         * Date getTime()
         * Calendar提供了一个getTime方法可以将表示的时间以Date形式返回
         */
        Date date=calendar.getTime();
        System.out.println(date);
        /**
         * void setTime(Date date);
         * Calendar类中的setTime方法允许一个Date类型的对象赋值
         */
        Date d = new  Date(0);
        calendar.setTime(d);
        System.out.println(calendar.toString());
    }
}

Calendar对象获取日期

Calendar提供了一种通用的获取时间分量的方式


int get(int field);

利用这个方法可以通过对不同的时间分量获取相应的值,Calendar对不同的时间分量提供了相应的常量值,我们在使用get方法获取的时候,参数就应该使用对应的常量作为时间分量

package cn.text.day02;
​
import java.util.Calendar;
​
/**
 * 从Calendar类中获取日期信息
 * Calendar类提供了一个通用的获取时间分量的方式
 * int get(int field);
 * @author Administrator
 *
 */
public class CalendarDemo01 {
    public static void main(String[] args) {
        Calendar cal  = Calendar.getInstance();
        /**
         * int get(int field);
         * 这个get方法能够返回当前日期的各种信息(年,月,日,时,分,秒)
         * 通过参数field指定获取日期信息中的那一个
         * Calendar类中定义了很多的常量值,可以使用定义好的常量来获取指定的信息
         */
        //获取年份
        int year=cal.get(Calendar.YEAR);
        System.out.println("当前的年份:"+year);
        //获取月份
        /**
         * 月是从0开始,也就是0表示的是1月,1表示的是2月
         */
        int month=cal.get(Calendar.MONTH)+1;
        System.out.println("当前的月份:"+month);
        //获得日
        int date  =cal.get(Calendar.DATE);
        System.out.println("当前的日:"+date);
        //获得时
        int hour = cal.get(Calendar.HOUR);
        //获得分
        int minute = cal.get(Calendar.MINUTE);
        //获得秒
        int second = cal.get(Calendar.SECOND);
        System.out.println(year+"年"+month+"月"+date+"日"+hour+"时"+minute+"分"+second+"秒");
        /**
         * Calendar DATE:月中的天
         * Calendar DAY_OF_MONTH:月中的天
         * Calendar DAY_OF_WEEK:一周的第几天
         * Calendar DAY_OF_YEAR:一年中的第几天
         */
        
        String [] date1 = {"日","一","二","三","四","五","六"};
        //weekDay值是从周日开始的,初始值是1,需要从数组中获取,所以需要下标-1
        int weekDay = cal.get(Calendar.DAY_OF_WEEK)-1; //6
        System.out.println("今天是周"+date1[weekDay]);
        //获得一个月中的第几天
        int monDay = cal.get(Calendar.DAY_OF_MONTH);
        System.out.println("已经是本月的第"+monDay+"天");
        //获得一年中的第几天
        int yearDay = cal.get(Calendar.DAY_OF_YEAR);
        System.out.println("已经是本年的第"+yearDay+"天");
        /*
         * getActualMaximum()
         * 获取指定日期信息的最大值Actual
         */
        int dd = cal.getActualMaximum(Calendar.DAY_OF_YEAR);
        System.out.println("今年最大天数:"+dd);
        int mod = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        System.out.println("本月最大天数:"+mod);
        
    }
}

Calendar对象设置日期

Calendar提供了一种通用的设置时间的方式

void set(int field,int value);

练习:

package cn.text.day02;
​
import java.util.Calendar;
​
/**
 * 向Calendar类对象赋值日期信息<br>
 * Calendar提供了一种通用的设置时间的方式<br>
 * void set(int field,int value)<br>
 * 对不同的时间分量分别设置不同的值<br>
 *
 */
public class CalendarDemo03 {
    /**
     * @param args
     */
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        System.out.println(cal.getTime());
        System.out.println(cal);
        /**
         * 调整年份 1998-06-05
         *
         * void set(int filed,int value)<br>
         * 第一个参数是日期常量,第二个参数是指<br>
         * 注意:对Calendar对象中日期信息的修改,<br>
         * 只是修改我们指定的日期信息<br>
         */
        cal.set(Calendar.YEAR, 1998);
        System.out.println(cal.get(Calendar.YEAR));
        System.out.println(cal.getTime());
        //调整月
        /*
         * 月份一月对应的是0,所以如果要获取6月份可以直接赋值为6,虽然通过
         * get方法输出常量值的时候是6,但是实际上6所所对应的月份是7月
         * 如果要获取6月份,必须-1
         */
        cal.set(Calendar.MONTH,5);
        System.out.println(cal.getTime());
        //修改日
        cal.set(Calendar.DATE, 5);
        //修改时
        cal.set(Calendar.HOUR_OF_DAY, 20);
        //修改分
        cal.set(Calendar.MINUTE, 8);
        //修改秒
        cal.set(Calendar.SECOND, 8);
        
        System.out.println(cal.getTime());
    }
​
}

Calendar日期计算

Calendar还允许我们是用统一的方式来对某个时间分量的值进行计算

void add(int field,int amout);

利用这个方法可以为某个时间分量的值加上给定的值

package cn.text.day02;
​
import java.util.Calendar;
​
/**
 * Calendar类对日期的计算<br>
 * void add(int field,int amout);<br>
 * 对给定的时间分量加上给定的值,如果给定的值是负数 则就是减去<br>
 *
 */
public class CalendarDemo02 {
    public static void main(String[] args) {
        // 实例化Calendar对象
        Calendar cal = Calendar.getInstance();
        System.out.println(cal.getTime());
        /**
         * 查看3年2个月零3天之后的那周的周五是哪天 add<br>
         * 查看3年2个月零3天之后的周五 是哪天 使用set<br>
         * void add(int field,int amout)<br>
         * 第一个参数是增加的日期类型<br>
         * 第二个参数是增加的值<br>
         * 如果给定的值是负数,则是减去<br>
         */
        //年+3年
        cal.add(Calendar.YEAR, 3);
        System.out.println(cal.getTime());
        //月+2月
        cal.add(Calendar.MONTH, 2);
        System.out.println(cal.getTime());
        //天+3月
        cal.add(Calendar.DAY_OF_YEAR, 3);
        System.out.println(cal.getTime());
        //周五
        cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
        System.out.println(cal.getTime());
    }
}

新日期

Java8在java.time包中提供了很多的新的API,有两个比较重要的API

Local(本地)--简化了对日期时间的处理,没有时区的问题

Zoned(时区)--通过制定的时区处理时期和时间

在新的java.time包中涵盖了所有处理日期,时间,时区,时刻,过程和时钟的操作

为什么要需要新的日期类

 

LocalDate/LocalTime 和LocalDateTime

package cn.text.day02;
​
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
​
/**
 * java8新日期类的演示
 * 不区分时间的本地时间
 * LocalDateTime:年月日时分秒
 * LocalDate:年月日
 * LocalTime:时分秒
 * @author Administrator
 *
 */
public class LocalTestDemo {
    public static void main(String[] args) {
        //获取年月日 时分秒
        LocalDateTime currentTime=LocalDateTime.now();
        System.out.println("当前时间:"+currentTime);
        //只要日期
        LocalDate date;
        date=LocalDate.now();
        date=currentTime.toLocalDate();
        System.out.println("当前日期:"+date);
        //只要时间
        LocalTime time;
        time=LocalTime.now();
        time=currentTime.toLocalTime();
        System.out.println("当前时间:"+time);
        
        //单独获取年
        System.out.println("年:"+currentTime.getYear());
        //获得月
        System.out.println("月:"+currentTime.getMonth());
        //获得日
        System.out.println("天:"+currentTime.getDayOfMonth());
        //获得时
        System.out.println("时:"+currentTime.getHour());
        //获得分
        System.out.println("分:"+currentTime.getMinute());
        //获得秒
        System.out.println("秒:"+currentTime.getSecond());
        
        //设置年月日 1998-06-05
        LocalDateTime date1 = currentTime.withDayOfMonth(5).withMonth(6).withYear(1998);
        System.out.println("姐姐生日:"+date1);
        
        //设置日期 由于这些方法返回的是LocalDateTime如果要用LocalDate接收需要使用toLocalDate转换
        LocalDate date2=currentTime.withYear(2022).withMonth(2).withDayOfMonth(14).toLocalDate();
        System.out.println("日期2:"+date2);
        
        LocalTime date3 =currentTime.toLocalTime().withHour(20).withMinute(24);
        System.out.println("时间3:"+date3);
        
        //字符串转换为日期时间
        LocalTime date4=LocalTime.parse("20:15:30").withHour(23);
        System.out.println("时间4:"+date4);
    }
}

支持时区的API

package cn.text.day03;
​
import java.time.ZoneId;
import java.time.ZonedDateTime;
​
/**
 * Java8新日期演示
 * 区分时区的本地时间
 *
 */
public class Java8Test {
    public static void main(String[] args) {
        //获取当前时间日期
        ZonedDateTime now  = ZonedDateTime.now();
        System.out.println(now);
        
        ZoneId id1 = now.getZone();
        System.out.println(id1);
        
        //设置时区
        ZoneId id = ZoneId.of("Europe/Paris");
        System.out.println(id);
        //获取当前时区现在的时间
        ZonedDateTime znow = now.withZoneSameInstant(id);
        System.out.println(znow);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值