11 - java的常用api - Date DateFormat Calendar

5. Date: 日期/时间类

构造方法:
  public Date()// 系统当前日期时间
  public Date(long date) 得到一个1970年1月1日 0点这个时间基础上,加上参数date 毫秒值对应的日期时间

方法:
  public long getTime() 获取日期所对应的毫秒值

package cn.itcast.demo02;

import java.util.Date;

/*
 *  时间和日期类
 *    java.util.Date
 *    
 *  毫秒概念: 1000毫秒=1秒
 *  
 *  毫秒的0点: 
 *     System.currentTimeMillis() 返回值long类型参数
 *     获取当前日期的毫秒值   3742769374405
 *     时间原点; 公元1970年1月1日,午夜0:00:00 英国格林威治  毫秒值就是0
 *     时间2088年8月8日
 *  
 *  重要: 时间和日期的计算,必须依赖毫秒值
 *    XXX-XXX-XX = 毫秒
 *    
 *         long time = System.currentTimeMillis();
        System.out.println(time);
 */
public class DateDemo {
    public static void main(String[] args) {
        function_3();
    }
    /*
     * Date类方法 setTime(long )传递毫秒值
     * 将日期对象,设置到指定毫秒值上
     * 毫秒值转成日期对象
     * Date的构造方法
     */
    public static void function_3(){
        Date date = new Date();
        System.out.println(date);
        
        date.setTime(0);
        System.out.println(date);
    }
    
    /*
     *   Date类方法 getTime() 返回值long
     *   返回的是毫秒值
     *   将Date表示的日期,转成毫秒值
     *   日期和毫秒值转换
     */
    public static void function_2(){
        Date date = new Date();
        long time = date.getTime();
        System.out.println(time);
    }
    
    /*
     * Date类的long参数的构造方法
     * Date(long ) 表示毫秒值
     * 传递毫秒值,将毫秒值转成对应的日期对象
     */
    public static void function_1(){
        Date date = new Date(0);
        System.out.println(date);
    }
    
    /*
     * Date类空参数构造方法
     * 获取到的是,当前操作系统中的时间和日期
     */
    public static void function(){
        Date date = new Date();
        System.out.println(date);
    }
}

6. DateFormat

是日期/时间格式化子类的抽象类, 使用其子类SimpleDateFormat 实例化
构造方法:
  public SimpleDateFormat() 默认的格式化操作
  public SimpleDateFormat(String pattern) 按照指定的格式,进行日期格式化
日期和时间模式:
  y 年
  M 年中的月份
  d 月份中的天数
  H 一天中的小时数(0-23)
  m 小时中的分钟数
  s 分钟中的秒数
  S 毫秒数
方法:
  public final String format(Date date) 把日期格式化成字符串。
  public Date parse(String source) 把日期字符串 转换成 日期对象。

练习
练习一:把Date对象转换成String
  Date date = new Date(1607616000000L);//Fri Dec 11 00:00:00 CST 2020
  DateFormat df = new SimpleDateFormat(“yyyy年MM月dd日”);
  String str = df.format(date);
  //str中的内容为2020年12月11日

练习二:把String转换成Date对象
  String str = ”2020年12月11日”;
  DateFormat df = new SimpleDateFormat(“yyyy年MM月dd日”);
  Date date = df.parse( str );
  //Date对象中的内容为Fri Dec 11 00:00:00 CST 2020

package cn.itcast.demo02;

import java.text.SimpleDateFormat;
import java.util.Date;

/*
 *  对日期进行格式化 (自定义)
 *    对日期格式化的类 java.text.DateFormat 抽象类, 普通方法,也有抽象的方法
 *    实际使用是子类 java.text.SimpleDateFormat 可以使用父类普通方法,重写了抽象方法
 */
public class SimpleDateFormatDemo {
    public static void main(String[] args) {
        function();
    }
    /*
     * 如何对日期格式化
     *  步骤:
     *    1. 创建SimpleDateFormat对象
     *       在类构造方法中,写入字符串的日期格式 (自己定义)
     *    2. SimpleDateFormat调用方法format对日期进行格式化
     *         String format(Date date) 传递日期对象,返回字符串
     *    日期模式:
     *       yyyy    年份
     *       MM      月份
     *       dd      月中的天数
     *       HH       0-23小时
     *       mm      小时中的分钟
     *       ss      秒
     *       yyyy年MM月dd日 HH点mm分钟ss秒  汉字修改,: -  字母表示的每个字段不可以随便写
     */
    public static void function(){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分钟ss秒");
        String date = sdf.format(new Date());
        System.out.println(date);
    }
}
package cn.itcast.demo02;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
 *   DateFormat类方法 parse
 *   将字符串解析为日期对象
 *   Date parse(String s) 字符串变成日期对象
 *   String => Date parse
 *   Date => String format
 *   
 */
public class SimpleDateFormatDemo1 {
    public static void main(String[] args) throws Exception{
        function();
    }
    /*
     *  将字符串转成Date对象
     *  DateFormat类方法 parse
     *  步骤:
     *    1. 创建SimpleDateFormat的对象
     *       构造方法中,指定日期模式
     *    2. 子类对象,调用方法 parse 传递String,返回Date
     *    
     *    注意: 时间和日期的模式yyyy-MM-dd, 必须和字符串中的时间日期匹配
     *                     1995-5-6
     *    
     *    但是,日期是用户键盘输入, 日期根本不能输入
     *    用户选择的形式
     */
    public static void function() throws Exception{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse("1995-5-6");
        System.out.println(date);
    }
}

7. Calendar

日历类,可获取日期中指定字段的值
方法:
  public static Calendar getInstance() //获取日期对象

  public int get(int field) //获取时间字段值
  public void add(int field,int amount) //指定字段增加某值
  public final void set(int field,int value)//设置指定字段的值
  public final Date getTime() //获取该日历对象转成的日期对象

package cn.itcast.demo03;

import java.util.Calendar;

/*
 *   日历类 java.util.Calendar
 *   抽象类,使用他的子类对象
 *   
 *   Calendar类写了静态方法 getInstance() 直接返回了子类的对象
 *   不需要直接new 子类的对象,通过静态方法直接获取
 */
public class CalendarDemo {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        System.out.println(c);
    }
}
package cn.itcast.demo03;

import java.util.Calendar;
import java.util.Date;

public class CalendarDemo1 {
    public static void main(String[] args) {
        function_3();
    }
    /*
     * Calendar类的方法getTime()
     * 把日历对象,转成Date日期对象
     */
    public static void function_3(){
        Calendar c = Calendar.getInstance();
        Date date = c.getTime();
        System.out.println(date);
    }
    

    /*
     * Calendar类方法add 日历的偏移量,
     * 可以指定一个日历中的字段,
     * 进行整数的偏移 add(int field, int value)
     */
    public static void function_2() {
        Calendar c = Calendar.getInstance();
        // 让日历中的天数,向后偏移280天
        c.add(Calendar.DAY_OF_MONTH, -280);
        // 获取年份
        int year = c.get(Calendar.YEAR);
        // 获取月份
        int month = c.get(Calendar.MONTH) + 1;
        // 获取天数
        int day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + day + "日");
    }

    /*
     * Calendar类的set方法 设置日历 set(int field,int value) field 设置的是哪个日历字段 value
     * 设置后的具体数值
     * 
     * set(int year,int month,int day) 传递3个整数的年,月,日
     */
    public static void function_1() {
        Calendar c = Calendar.getInstance();
        // 设置,月份,设置到10月分
        // c.set(Calendar.MONTH, 9);

        // 设置年,月,日
        c.set(2099, 4, 1);

        // 获取年份
        int year = c.get(Calendar.YEAR);
        // 获取月份
        int month = c.get(Calendar.MONTH) + 1;
        // 获取天数
        int day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + day + "日");
    }

    /*
     * Calendar类的get方法 获取日历字段的值 int get(int) 参数int,获取的哪个日历字段 返回值,就表示日历字段的具体数值
     */
    public static void funtion() {
        Calendar c = Calendar.getInstance();
        // 获取年份
        int year = c.get(Calendar.YEAR);
        // 获取月份
        int month = c.get(Calendar.MONTH) + 1;
        // 获取天数
        int day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(year + "年" + month + "月" + day + "日");
    }
}
package cn.itcast.demo04;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class DateTest {
    public static void main(String[] args) throws Exception {
        function_1();
    }
    /*
     *  闰年计算
     *  2000 3000
     *  高级的算法: 日历设置到指定年份的3月1日,add向前偏移1天,获取天数,29闰年
     */
    public static void function_1(){
        Calendar c = Calendar.getInstance();
        //将日历,设置到指定年的3月1日
        c.set(2088, 2, 1);
        //日历add方法,向前偏移1天
        c.add(Calendar.DAY_OF_MONTH, -1);
        //get方法获取天数
        int day = c.get(Calendar.DAY_OF_MONTH);
        System.out.println(day);
    }
    
    /*
     *  计算活了多少天
     *   生日  今天的日期
     *   两个日期变成毫秒值,减法
     */
    public static void function() throws Exception {
        System.out.println("请输入出生日期 格式 YYYY-MM-dd");
        //获取出生日期,键盘输入
        String birthdayString = new Scanner(System.in).next();
        //将字符串日期,转成Date对象
        //创建SimpleDateFormat对象,写日期模式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //调用方法parse,字符串转成日期对象
        Date birthdayDate = sdf.parse(birthdayString);
        
        //获取今天的日期对象
        Date todayDate = new Date();
        
        //将两个日期转成毫秒值,Date类的方法getTime
        long birthdaySecond = birthdayDate.getTime();
        long todaySecond = todayDate.getTime();
        long secone = todaySecond-birthdaySecond;
        
        if(secone < 0){
            System.out.println("还没出生呢");
        }
        else{
        System.out.println(secone/1000/60/60/24);
        }
        
    }
}
posted @ 2019-07-03 15:54  Alice的小屋  阅读(225)  评论(0编辑  收藏  举报