Date类,DateFormat类,Calendar类

Date类

date.getTime() 距1970年1月1日 8:00 差多少毫秒
date.settime(毫秒数) 换算成当前时间
DateFormat 转换日期
1.日期格式转换成字符串

24小时格式为HH

Date date =new Date();
SimpleDateFormat   simpleDateFormat=new SimpleDateFormat(年月日格式)
String   str=simpleDateFormat.format(date)
System.out.println(str)

2.字符串格式转换成日期格式

String  str ="1995/05/02 9:15:56"
SimpleDateFormat   simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"字符串格式)
Date date=simpleDateFormat.parse(str)
System.out.println(date.tolocales())

import java.util.Date;

/*
 * Date:表示特定的瞬间,精确到毫秒。 
 * 
 * 构造方法:
 *         Date():根据当前的默认毫秒值创建日期对象
 *         Date(long date):根据给定的毫秒值创建日期对象
 */
public class DateDemo {
    public static void main(String[] args) {
        // 创建对象
        Date d = new Date();
        System.out.println("d:" + d);

        // 创建对象
        // long time = System.currentTimeMillis();
        long time = 1000 * 60 * 60; // 1小时
        Date d2 = new Date(time);
        System.out.println("d2:" + d2);
    }
}
日期和毫秒值的相互转换
import java.util.Date;

/*
 * public long getTime():获取时间,以毫秒为单位
 * public void setTime(long time):设置时间
 * 
 * 从Date得到一个毫秒值
 *         getTime()
 * 把一个毫秒值转换为Date
 *         构造方法
 *         setTime(long time)
 */
public class DateDemo {
    public static void main(String[] args) {
        // 创建对象
        Date d = new Date();

        // 获取时间
        long time = d.getTime();
        System.out.println(time);
        // System.out.println(System.currentTimeMillis());

        System.out.println("d:" + d);
        // 设置时间
        d.setTime(1000);
        System.out.println("d:" + d);
    }
}

DateFormat

是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。


Date类,DateFormat类,Calendar类_第1张图片
image.png

Date -- String(格式化)
String -- Date(解析)
DateFormat是抽象类,所以使用其子类SimpleDateFormat

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

/*
 * Date     --     String(格式化)
 *         public final String format(Date date)
 * 
 * String -- Date(解析)
 *         public Date parse(String source)
 * 
 * DateForamt:可以进行日期和字符串的格式化和解析,但是由于是抽象类,所以使用具体子类SimpleDateFormat。
 * 
 * SimpleDateFormat的构造方法:
 *         SimpleDateFormat():默认模式
 *         SimpleDateFormat(String pattern):给定的模式
 *             这个模式字符串该如何写呢?
 *             通过查看API,我们就找到了对应的模式
 *             年 y
 *             月 M    
 *             日 d
 *             时 H
 *             分 m
 *             秒 s
 * 
 *             2014年12月12日 12:12:12
 */
public class DateFormatDemo {
    public static void main(String[] args) throws ParseException {
        // Date -- String
        // 创建日期对象
        Date d = new Date();
        // 创建格式化对象
        // SimpleDateFormat sdf = new SimpleDateFormat();
        // 给定模式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        // public final String format(Date date)
        String s = sdf.format(d);
        System.out.println(s);
        
        
        //String -- Date
        String str = "2008-08-08 12:12:12";
        //在把一个字符串解析为日期的时候,请注意格式必须和给定的字符串格式匹配
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date dd = sdf2.parse(str);
        System.out.println(dd);
    }
}

测试来到世上多少天

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
import java.util.logging.SimpleFormatter;

/**
 * Created by ttc on 2018/6/7.
 */
public class test1 {
    public static void main(String[] args) throws ParseException {
        Scanner scanner=new Scanner(System.in);
        System.out.println("生日");
        String str =scanner.nextLine();
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy/MM/dd");
        Date date =simpleDateFormat.parse(str);
        System.out.println(date.getTime());
        System.out.println(System.currentTimeMillis());
        long tianshu=(System.currentTimeMillis()-date.getTime())/1000/60/60/24;
        System.out.println(tianshu);
    }
}

Calendar类

*(1)日历类,封装了所有的日历字段值,通过统一的方法根据传入不同的日历字段可以获取值。
(2)如何得到一个日历对象呢?
Calendar rightNow = Calendar.getInstance();
本质返回的是子类对象
(3)成员方法
A:根据日历字段得到对应的值
B:根据日历字段和一个正负数确定是添加还是减去对应日历字段的值
C:设置日历对象的年月日
(4)案例:
计算任意一年的2月份有多少天?

package cn.itcast_01;

import java.util.Calendar;

/*
 * Calendar:它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
 * 
 * public int get(int field):返回给定日历字段的值。日历类中的每个日历字段都是静态的成员变量,并且是int类型。
 */
public class CalendarDemo {
    public static void main(String[] args) {
        // 其日历字段已由当前日期和时间初始化:
        Calendar rightNow = Calendar.getInstance(); // 子类对象

        // 获取年
        int year = rightNow.get(Calendar.YEAR);
        // 获取月
        int month = rightNow.get(Calendar.MONTH);
        // 获取日
        int date = rightNow.get(Calendar.DATE);

        System.out.println(year + "年" + (month + 1) + "月" + date + "日");
    }
}

Clander的add和set方法

package cn.itcast_02;

import java.util.Calendar;

/*
 * public void add(int field,int amount):根据给定的日历字段和对应的时间,来对当前的日历进行操作。
 * public final void set(int year,int month,int date):设置当前日历的年月日
 */
public class CalendarDemo {
    public static void main(String[] args) {
        // 获取当前的日历时间
        Calendar c = Calendar.getInstance();

        // 获取年
        int year = c.get(Calendar.YEAR);
        // 获取月
        int month = c.get(Calendar.MONTH);
        // 获取日
        int date = c.get(Calendar.DATE);
        System.out.println(year + "年" + (month + 1) + "月" + date + "日");

        // // 三年前的今天
        // c.add(Calendar.YEAR, -3);
        // // 获取年
        // year = c.get(Calendar.YEAR);
        // // 获取月
        // month = c.get(Calendar.MONTH);
        // // 获取日
        // date = c.get(Calendar.DATE);
        // System.out.println(year + "年" + (month + 1) + "月" + date + "日");

        // 5年后的10天前
        c.add(Calendar.YEAR, 5);
        c.add(Calendar.DATE, -10);
        // 获取年
        year = c.get(Calendar.YEAR);
        // 获取月
        month = c.get(Calendar.MONTH);
        // 获取日
        date = c.get(Calendar.DATE);
        System.out.println(year + "年" + (month + 1) + "月" + date + "日");
        System.out.println("--------------");

        c.set(2011, 11, 11);
        // 获取年
        year = c.get(Calendar.YEAR);
        // 获取月
        month = c.get(Calendar.MONTH);
        // 获取日
        date = c.get(Calendar.DATE);
        System.out.println(year + "年" + (month + 1) + "月" + date + "日");
    }
}

获取任意一年的二月有多少天

import java.util.Calendar;
import java.util.Scanner;

/*
 * 获取任意一年的二月有多少天
 * 
 * 分析:
 *         A:键盘录入任意的年份
 *         B:设置日历对象的年月日
 *             年就是A输入的数据
 *             月是2
 *             日是1
 *         C:把时间往前推一天,就是2月的最后一天
 *         D:获取这一天输出即可
 */
public class CalendarTest {
    public static void main(String[] args) {
        // 键盘录入任意的年份
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年份:");
        int year = sc.nextInt();

        // 设置日历对象的年月日
        Calendar c = Calendar.getInstance();
        c.set(year, 2, 1); // 其实是这一年的3月1日
        // 把时间往前推一天,就是2月的最后一天
        c.add(Calendar.DATE, -1);

        // 获取这一天输出即可
        System.out.println(c.get(Calendar.DATE));
    }
}

输入日期,打印日历

package com.company;

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

/**
 * Created by ttc on 2018/6/7.
 */
public class CalendarDemo {
    public static void main(String[] args) throws ParseException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入日期:格式为:yyyy-MM-dd");
        String strDate = scanner.nextLine();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = simpleDateFormat.parse(strDate);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);

        int day_counts = calendar.getActualMaximum(Calendar.DATE);
        int day = calendar.get(Calendar.DATE);

        calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),1);

        int first_day_of_month = calendar.get(Calendar.DAY_OF_WEEK);//6

        int[] array = new int[42];
        int index = 1;
        for(int i = first_day_of_month - 1; i < first_day_of_month - 1 + day_counts; i++)
        {
            array[i] = index;
            index++;
        }
        System.out.println("日\t一\t二\t三\t四\t五\t六");
        for(int i = 0; i < array.length; i++)
        {
            if(i % 7 == 0 && i != 0)
            {
                System.out.println();
            }

            if(array[i] != 0)
            {
                if(array[i] == day)
                {
                    System.out.print("*");
                }
                System.out.print(array[i]+ "\t");


            }
            else
            {
                System.out.print(""+ "\t");
            }

        }

你可能感兴趣的:(Date类,DateFormat类,Calendar类)