Date和Calendar知识

文章来源:http://www.cnblogs.com/manue1/p/4495983.html

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-10-09 09:28:46

Date和Calendar知识的相关文章

JAVA之旅(二十三)——System,RunTime,Date,Calendar,Math的数学运算

JAVA之旅(二十三)--System,RunTime,Date,Calendar,Math的数学运算 map实在是太难写了,整理得我都晕都转向了,以后看来需要开一个专题来讲这个了,现在我们来时来学习一些新的小东西吧 一.System 翻译过来系统的意思,系统类,里面的方法都是静态的,可以直接调用 我们来演示一下吧,先从获取系统信息开始: package com.lgl.hellojava; import java.util.Properties; public class HelloJJAVA

Java日期与时间的处理/Date,String,Calendar转换

public class Demo01 { //Java中Date类和Calendar简介 public static void main(String[] args) { long now=System.currentTimeMillis(); System.out.println("now= "+now); Date d1=new Date(now); System.out.println("d1= "+d1); Calendar c1=Calendar.get

java 日期操作,Date、Calendar 操作

java开发中避免不了日期相关操作,这里总结了一些常用方法~ 直接上码: package jse; import java.io.UnsupportedEncodingException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; /**  * 常用日期操

java Date和Calendar类

最近在无聊的看书,遇到一编程题目,问题描述如下: 黑色星期五源于西方迷信:耶稣基督死于星期五,而13也是一个不吉利的数字.黑色星期五即该日同时是星期五又是13号,求未来几年内这样的日子. 基于该问题会涉及到java中的关于时间类的部分,故尝试通过该题目总结现阶段的java Date和calendar类的问题. 一.Date类 查阅API文档可知,Date类源于jdk1.0版本,并在jdk1.1版本中其绝大多数方法被Calendar类中方法所代替.Date类构造函数public且未abstrct,

Freebie: Date Picker Calendar Demo Form For Oracle Forms 6i

I have already posted and provided the required PLSQL Library and the Calendar FMX file in my previous blog post Date Picker Calendar For Oracle Forms but some people were still not able to use this utility in their forms, so I thought to provide a d

Date Picker Calendar For Oracle Forms 6i

Giving date picker calendar option to user for date type fields in Oracle Forms. I am providing you the form (FoxCal.Fmx) and two libraries (General.plx and Calendar.pll). You can download these files by clicking below link: Download Form and require

java中Date与Calendar详解

在开发中,Date与Calendar使用率上是相当高的,如果对它们不太了解,那么,在实际开发中会发生各种状态.如:为什么我获得到的本月的月份不是本月等等. Date篇 public class Dateextends Objectimplements Serializable, Cloneable, Comparable<Date>类 Date 表示特定的瞬间,精确到毫秒 在类 Date 所有可以接受或返回年.月.日期.小时.分钟和秒值的方法中,将使用下面的表示形式: 年份 y 由整数 y -

Java中的Date和Calendar的常用用法

在java中用到的最多的时间类莫过于 java.util.Date了,由于Date类中将getYear(),getMonth()等获取年.月.日的方法都废弃了,所以要借助于Calendar来获取年.月.日.周等比较常用的日期格式 注意:以下代码均已在jdk1.6中测试通过,其他版本可能使用不同,请注意! Date与String的相互转换 /**  * Date与String的互转用法,这里需要用到SimpleDateFormat */Date currentTime = new Date();

java日期类型转换总结date timestamp calendar string

用Timestamp来记录日期时间还是很方便的,但有时候显示的时候是不需要小数位后面的毫秒的,这样就需要在转换为String时重新定义格式. Timestamp转化为String: SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//定义格式,不显示毫秒 Timestamp now = new Timestamp(System.currentTimeMillis());//获取系统当前时间 String