Java中的日期操作

Date :         getTime() 、setTime()

SimpleDateFormate :   Formate(Date)、 parse(String s)

Calendar :      getInstance()、set() 、get()、getActualMaximum()、add()、

             gettime()、setTime(Date)、

字符串、Date、Calendar之间的转换

---------------------------------------淫荡分隔------------------------------------------------
 Date及其常用API
Date简介

Java中的时间使用标准类库的java.util.Date,其表示特定的瞬间,精确到毫秒。是用距离一个固定时间点的毫秒数(可正可负,long类型)表达一个特定的时间点。
固定的时间点叫纪元(epoch),是UTC时间1970年 1月 1日 00:00:00
UTC(Universal Time Coordinated世界调整时间)与GMT(Greenwich Mean Time格林威治时间)一样,是一种具有实际目的的科学标准时间。
因为Date的设计具有"千年虫"以及"时区"的问题,所以Date中的大部分方法已经不建议使用了,它们都被java.util.Calendar类所取代

import java.util.Date;

    /**
     * 测试Date 的getTime与setTime
     * @param args
     */
    public static void main(String[] args) {
        Date date =new Date();
        System.out.println(date);
        /*
         * 计算明天此刻的时间
         */
        long time =date.getTime();
        time = time+24*60*60*1000;
        date.setTime(time);
        System.out.println(date);
    }

SimpleDateFormat
SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。
简单的说,SimpleDateFormat就是根据一个特定的日期格式在字符串与Date之间相互转换。那么这个特定的日期格式是怎样定义的呢?下面我们来学习一下如何定义日期格式字符串。

作用: 在日期格式字符串与日期之间相互转换

在日期格式字符串中,出现的非关键字符都原意输出

需要掌握的方法

将Date格式化为String    String format(Date d)

将String解析为Date    Date   parse(String s)

/**
  * 通过SimpleDateFormate将字符转化为date
  * @author Administrator
  *
  */
 class TestSimpleDate{
     public static void main(String[] args) throws ParseException {
        String StrD ="2015-04-20 11:22:45";
        SimpleDateFormat sdfd =new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
        Date dat =sdfd.parse(StrD);
        System.out.println(dat);
    }
 }

public class Shenri {

    /**
     * 1.获取用户输入的生日
     * 2.将其转换为Date
     * 3.创建一个Date用于表示当前系统时间
     * 4.用当前系统时间的毫秒值减去出身当天的毫秒值
     * 5,将差初一一天的毫秒值
     * 6.商就是经过的天数
     * @param args
     * @throws ParseException
     */
    public static void main(String[] args) throws ParseException {
        Scanner scanner =new Scanner(System.in);
        System.out.println("以1992-05-08格式输入生日:");
        String shengri=scanner.nextLine();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse(shengri);
        Date now = new Date();
        long cha;
        cha= now.getTime()-date.getTime();
        System.out.println(cha);
        int day;
        day = (int) (cha/(3600*24*1000));
        System.out.println("恭喜你活了"+day+"天");
    }

}

Calendar类

java.util.Calendar 类用于封装日历信息,其主要作用在于其方法可以对时间分量进行运算。
Calendar是抽象类,其具体子类针对不同国家的日历系统,其中应用最广泛的是GregorianCalendar(格里高里历,即通用的阳历),对应世界上绝大多数国家/地区使用的标准日历系统。

1. getInstance()方法

Calendar是抽象类,其提供了一个工厂方法:Calendar getInstance()。该方法可以根据当前系统所在地区获取一个适当的Calendar的子类实现。
在实际开发中,也推荐使用该方法来实例化Calendar的对象。

/**
 * Calendar 用于操作时间的类
 * 操作: 设置 获取 计算时间
 * @author Administrator
 */
public class TestCalendar {

    public static void main(String[] args) {
    /*
     * 使用Calendar提供的静态方法获取适当的实例
     * 默认创建calendar表示的是当前系统的时间
     */
        Calendar calendar  = Calendar.getInstance();
        /*
         * 查看对象具体的类型
         * obj.getClass().getName()
         */
        String className
            =calendar.getClass().getName();
        System.out.println(className);

        //输出的是java.util.GregorianCalendar 的toString返回值
        System.out.println(calendar);
        /*
         * calendar 定义了一个方法
         * Date getTime()
         * 返回一个描述改Calendar表示的时间的Date对象
         *
         */
            Date date =calendar.getTime();
            System.out.println(date);

    }
}

2. 设置日期及时间分量

Calendar提供了一种通用的设置时间的方式:
void set(int field,int value)
该方法可以通过对不同的时间分量分别设置不同的值。Calendar对不同的时间分量提供了相应的常量,我们在使用set方法设置时,第一个参数就应当使用对应的常量作为时间分量。

public class TestCalendar {

    /**
     * @param args
     */
    public static void main(String[] args) {
        /*
         * 设置时间使用Calendar提供的方法
         * void set (int field,int value)
         * 对给定的时间分量设定给定的值
         *
         * 对Calendar 设置时间为2013-12-25
         */
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR,2013);
        calendar.set(Calendar.MONTH,11);
        /*
         * 对于几号而言 calendar 提供了两个时间分量
         * 意义完全相同,任选其一
         * DAY_OF_MONTH
         * DATE
         */
        calendar.set(Calendar.DATE,25);
        calendar.set(Calendar.DAY_OF_MONTH, 25);

        /*
         * 超过该时间分量允许的最大值后,会向上进位
         * 日想月进位 月向年进位
         */

        calendar.set(Calendar.DATE,32);
        System.out.println(calendar.getTime());
    }

}

3. 获取时间分量对应的值

Calendar提供了一种通用的获取时间分量的方式:
int get(int field)
该方法可以通过对不同的时间分量获取相应的值。Calendar对不同的时间分量提供了相应的常量,我们在使用get方法获取时,参数就应当使用对应的常量作为时间分量。

/**
 * 设置为2014-04-23
 * @author Administrator
 *
 */

class TestGet{

    public TestGet() {
        Calendar calendar_get= Calendar.getInstance();
        calendar_get.set(Calendar.YEAR,2014);
        calendar_get.set(Calendar.MONTH,3);
        calendar_get.set(Calendar.DATE,23);
        /*
         * 获取今天是周几
         * int get(int field)
         * 获取给定的时间分量所对应的值
         * 美国人 周日为一周的第一天
         */
        System.out.println("今天是周"+(calendar_get.get(Calendar.DAY_OF_WEEK)==1?"日":calendar_get.get(Calendar.DAY_OF_WEEK)-1));
        /*
         * 获取时间 几点
         * HOUR            12小时
         * HOUR_OF_DAY     24小时制
         */
        System.out.println(calendar_get.get(Calendar.HOUR_OF_DAY)+"点"+ calendar_get.get(Calendar.MINUTE)+"分"+calendar_get.get(Calendar.SECOND)+"秒");
        /*
         * 查看今年过去多少天了
         * DAY_OF_YEAR
         */
        System.out.println("已经过了"+calendar_get.get(Calendar.DAY_OF_YEAR)+"天");
    }
}
/**
 * 获取某个时间分量所容许的最大值
 */

class TestCalendarDemo4{
    public static void main(String[] args) {
        /*
         * int
         * 获取给定时间分量所允许的最大值
         */
        //这个月最多多少天
        Calendar calendar_max= Calendar.getInstance();

        int days =calendar_max.getActualMaximum(Calendar.DAY_OF_MONTH);
        System.out.println(days);

        //今年总共多少天
        days = calendar_max.getActualMaximum(Calendar.DAY_OF_YEAR);

        System.out.println(days);
    }
}
/**
 * 输出今年每月的最后一天
 * 就是每月多少天
 * @author Administrator
 *
 */
class TestMaxmooth{
    public static void main(String[] args) {

        Calendar calendar_last = Calendar.getInstance();
        //for(int i=Calendar.JANUARY;i<=Calendar.DECEMBER;i++){}

        for(int i=0;i<12;i++){
            calendar_last.set(Calendar.MONTH,i);
            System.out.println(i+1+"月总共:"+calendar_last.getActualMaximum(Calendar.DAY_OF_MONTH));
        }
    }

}
/**add使用*/

class Calendar_add{
    public static void main(String[] args) {
        Calendar calendaradd = Calendar.getInstance();

        System.out.println(calendaradd.getTime());
        /*
         * 当前日期加1
         */
        calendaradd.add(Calendar.DAY_OF_YEAR, 1);
        System.out.println(calendaradd.getTime());
        //加两年
        calendaradd.add(Calendar.YEAR, 2);
        System.out.println(calendaradd.getTime());

        //加到32 自动切换
        calendaradd.add(Calendar.DAY_OF_YEAR, 11);
        System.out.println(calendaradd.getTime());

        //减去12小时
        calendaradd.add(Calendar.HOUR_OF_DAY, 12);
        System.out.println(calendaradd.getTime());

    }
}
字符串  date 和Calendar 之间如何转换的
/**
 * 测试Calendar 的setTime
 */
class  Testsettime{
    public static void main(String[] args) throws ParseException {
        /*
         * void setTime(Date date)
         * 使当前Calendar对象描述给定的Date对象所表示的日期
         *
         * 输入女朋友的今年的生日 ,
         * 输出明年女朋友的生日是星期几
         *
         * 1.创建Scanner用于获取用户输入的日期
         * 2.将日期通过SimpleDateFormate转换为Date
         * 3.将date 转换为Calendar
         * 4.将Calendar加上1年
         * 5.在通过Calendar 获取对应的Date
         * 6.通过SimpleDateFormate输出成目标格式
         *
         */
        Scanner scanner = new Scanner(System.in);
        System.out.println("以2012-01-02  格式输入女朋友的生日");
        String shengri = scanner.nextLine();
        //2
        SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
        作用: 将字符串转换为date
        Date date=sdf.parse(shengri);

        System.out.println(date);

        Calendar calengril= Calendar.getInstance();
        作用:将date转换为calendar
        calengril.setTime(date);

        calengril.add(Calendar.YEAR, 1);
        calengril.get(Calendar.DAY_OF_WEEK);
        作用:将calendar 转换为date
        date= calengril.getTime();
        作用:将date转换为字符串
        System.out.println(sdf.format(date)+"星期"+calengril.get(Calendar.DAY_OF_WEEK-1));
    }
}
时间: 2024-12-03 11:28:53

Java中的日期操作的相关文章

Java中常用日期操作及方法

前言 涉及到日期计算和字符串与日期转换,转来转去很是麻烦,于是归纳总结一下.以下都可以用. 一.Dateformat类的常用格式 y 年 Year 1996; 96 M 年中的月份 Month July; Jul; 07 w 年中的周数 Number 27 W 月份中的周数 Number 2 D 年中的天数 Number 189 d 月份中的天数 Number 10 F 月份中的星期 Number 2 E 星期中的天数 Text Tuesday; Tue a Am/pm 标记 Text PM H

java中的日期操作Calendar和Date

1. Calendar转Date Calendar calendar = Calendar.getInstance(); Date date = calendar.getTime(); 2. Date转Calendar Date date = new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); 3. 获取时间的年月日时分秒 Date里的getYear()等已经不推荐使用了,要使用以下方式获

填坑:Java 中的日期转换

我们之前讨论过时间,在Java 中有一些方法会出现横线?比如Date 过期方法. 参考文章:知识点:java一些方法会有横线?以Date 过期方法为例 Java中的日期和时间处理方法 Date类(官方不再推荐使用,官方解释Date类不利于国际化,推荐使用Calendar类) Calendar类 DateFormat类 使用此类来时间初始化 我们发现,时间toLocalString 会有横线: vo.setSubmitDate(new Date().toLocaleString()); 可以改为:

java中的集合操作类(未完待续)

申明: 实习生的肤浅理解,如发现有错误之处,还望大牛们多多指点 废话 其实我写java的后台操作,我每次都会遇到一条语句:List<XXXXX> list = new ArrayList<XXXXX>(); 但是我仅仅只是了解,list这个类是一个可变长用来存储的对象实例的类,我甚至觉得这个List对象可以理解成数组,但是却又与java中咱们正常理解的数组很多的不同,比如说,他的长度可以随着需要自动增长,比如说,实例化一个List类就和咱们声明数组的时候是不一样的! 今天的实习生活

Delphi与Java中的日期互换

在最近做的一个项目中用到了Java和Delphi,发现它们不能正确读取对方的日期类型,如在Java中写入一个值为“2007-12-1”的日期值,通过Delphi读取却不是这个值了.通过查阅资料,发现两者对日期类型的定义略有不同.Java中日期使用的是长整型进行存储的,它表示距“1970-1-1”的毫秒数.如“1970-1-2”是在“1970-1-1”后的86400000毫秒,所以Java中就使用86400000表示“1970-1-2”这个日期.由于长整型是带符号的,所以我们可以使用负的毫秒数来表

java中的日期处理类总结

转自 http://blog.csdn.net/shibenjie/article/details/4263912 java中的日期处理类总结:Date/Calendar/GregorianCalendar/DateFormat/SimpleDateFormat类 今天花了好大一点时间把java的日期类做了一下整理,哈 1.         Date类(该类现在很少用了) l         Date类对象的创建: n         创建一个当前时间 //默认是创建一个代表系统当前日期的Dat

java中Calendar日期对象

转帖网上简介 Calendar c = Calendar.getInstance();//创建实例 默认是当前时刻 c.get(Calendar.YEAR); c.get(Calendar.MONTH); c.get(Calendar.DATE);//获取年,月,日 当然时分秒也可以 注意这里的月份比较特殊 从0开始 c.get(Calendar.DAY_OF_WEEK);//获取当前日期在星期中的第几天 从1-7对应 日-六 c.getActualMaximum(Calendar.DAY_OF

【你不知道的事系列】Java中处理日期的类

Java中提供了一系列用于处理日期.时间的类,包括创建日期,时间对象,获取系统当前日期,时间等操作 Date类: 位于java.util.Date,从JDK1.0起就存在了,但现在它的大部分构造器,方法已过时,不再推荐使用了. 下面介绍我们本文的主角: Calendar类: 抽象类,实现了序列化接口,用于表示日历.创建Calendar对象可通过几个静态getInstance()方法来获取. Calendar与Date都是表示日期的工具类,它们可自由转换,如下代码: Calendar calend

Java中的日期和时间

以下内容引用自http://wiki.jikexueyuan.com/project/java/date-time.html: Java在java.util包中提供了Date类,这个类封装了当前的日期和时间. Date类支持两种构造函数.第一个构造函数初始化对象的当前日期和时间. Date() 下面的构造函数接收一个参数等于自1970年1月1日午夜起已经过的毫秒数 Date(long millisec) 一旦有一个可用的日期对象,可以调用以下任何一种支持的方法使用时间: 方法 描述 boolea