Java日期时间实用工具类

1.Date (java.util.Date)
    Date();
        以当前时间构造一个Date对象
    Date(long);
        构造函数
   
    boolean after(Date when)
        测试此日期是否在指定日期之后

boolean before(Date when)
        测试此日期是否在指定日期之前

Object clone()
        返回此对象的副本

int compareTo(Date anotherDate)
        比较两个日期的顺序

boolean equals(Object obj)
        比较两个日期的相等性

long getTime()
        返回自 1970 年 1 月 1 日 00:00:00 GMT 至今的毫秒数
       
    void setTime(long time)
        按time的指定,设置时间和日期,表示自 1970 年 1 月 1 日 00:00:00 GMT 至今的以毫秒为单位的时间值
       
2.Calendar 类是一个抽象类. 日历瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量.
    Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象。Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已由当前日期和时间初始化:
        Calendar rightNow = Calendar.getInstance();
    Calendar 定义了某些日历字段返回值的范围,以及这些值的含义。例如,对于所有日历,日历系统第一个月的值是 MONTH == JANUARY。
   
    public void set(int f, int value);
        将日历字段 f 更改为 value. 此外, 它设置了一个内部成员变量, 以指示日历字段 f 已经被更改.
        尽管日历字段 f 是立即更改的, 但是直到下次调用 get()、getTime()、getTimeInMillis()、add() 或 roll() 时才会重新计算日历的时间值(以毫秒为单位).
       
    public void add(int f, int delta);
        将 delta 添加到 f 字段中。这等同于调用 set(f, get(f) + delta), 溢出发生在字段值超出其范围时,下一个更大的字段会递增或递减,并将字段值调整回其范围内;
        与 set() 不同,add() 强迫日历系统立即重新计算日历的毫秒数和所有字段.
        如,要从当前日历时间减去 5 天,可以通过调用以下方法做到这一点: add(Calendar.DAY_OF_MONTH, -5)。

public void roll(int f, int delta);
        将 delta 添加到 f 字段中, 但不更改更大的字段.

public static Calendar getInstance()
        使用默认时区和语言环境获得一个日历。返回的 Calendar 基于当前时间,使用了默认时区和默认语言环境。
       
    public static Calendar getInstance(TimeZone zone)
        使用指定时区和默认语言环境获得一个日历。返回的 Calendar 基于当前时间,使用了给定时区和默认语言环境。

public static Calendar getInstance(Locale aLocale)
        使用默认时区和指定语言环境获得一个日历。返回的 Calendar 基于当前时间,使用了默认时区和给定的语言环境。 aLocale - 用于星期数据的语言环境

public static Calendar getInstance(TimeZone zone, Locale aLocale)
        使用指定时区和语言环境获得一个日历。返回的 Calendar 基于当前时间,使用了给定的时区和给定的语言环境。
        zone - 要使用的时区
        aLocale - 用于星期数据的语言环境

public static Locale[] getAvailableLocales()
        返回所有语言环境的数组,此类的 getInstance 方法可以为其返回本地化的实例。返回的数组必须至少包含一个 Locale 实例,它等同 Locale.US。
        语言环境的数组,对于该数组,本地化的 Calendar 实例是可用的。
   
    public final Date getTime()
        返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。
   
    public final void setTime(Date date)
        使用给定的 Date 设置此 Calendar 的时间。
        注:使用 Date(Long.MAX_VALUE) 或 Date(Long.MIN_VALUE) 调用 setTime() 可能产生来自 get() 的错误字段值。
        date - 给定的 Date。

public long getTimeInMillis()
        返回此 Calendar 的时间值,以毫秒为单位。
        返回:当前时间,以从历元至现在所经过的 UTC 毫秒数形式。
       
    public void setTimeInMillis(long millis)
        用给定的 long 值设置此 Calendar 的当前时间值。
       
    public int get(int field)
        返回给定日历字段的值

public final void set(int year, int month, int date)
        设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。保留其他日历字段以前的值。如果不需要这样做,则先调用 clear()。
        参数:year - 用来设置 YEAR 日历字段的值。
            month - 用来设置 MONTH 日历字段的值。Month 值是基于 0 的。例如,0 表示 January。
            date - 用来设置 DAY_OF_MONTH 日历字段的值。
   
    public final void set(int year, int month, int date, int hourOfDay, int minute)
        设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。保留其他字段以前的值。如果不需要这样做,则先调用 clear()。
        参数:year - 用来设置 YEAR 日历字段的值。
        month - 用来设置 MONTH 日历字段的值。Month 值是基于 0 的。例如,0 表示 January。
        date - 用来设置 DAY_OF_MONTH 日历字段的值。
        hourOfDay - 用来设置 HOUR_OF_DAY 日历字段的值。
        minute - 用来设置 MINUTE 日历字段的值。

public final void set(int year, int month, int date, int hourOfDay, int minute, int second)
        设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。保留其他字段以前的值。如果不需要这样做,则先调用 clear()。
        参数:year - 用来设置 YEAR 日历字段的值。
        month - 用来设置 MONTH 日历字段的值。Month 值是基于 0 的。例如,0 表示 January。
        date - 用来设置 DAY_OF_MONTH 日历字段的值。
        hourOfDay - 用来设置 HOUR_OF_DAY 日历字段的值。
        minute - 用来设置 MINUTE 日历字段的值。
        second - 用来设置 SECOND 日历字段的值。

public final boolean isSet(int field)
        确定给定日历字段是否已经设置了一个值,其中包括因为调用 get 方法触发内部字段计算而导致已经设置该值的情况。
        返回:如果给定日历字段已经设置了一个值,则返回 true;否则返回 false。

public boolean before(Object when)
        判断此 Calendar 表示的时间是否在指定 Object 表示的时间之前,返回判断结果。此方法等效于: compareTo(when) < 0
       
    public boolean after(Object when)
        判断此 Calendar 表示的时间是否在指定 Object 表示的时间之后,返回判断结果。此方法等效于: compareTo(when) > 0

public int compareTo(Calendar anotherCalendar)
        比较两个 Calendar 对象表示的时间值(从历元至现在的毫秒偏移量)。
   
    public abstract void roll(int field, boolean up)
        在给定的时间字段上添加或减去(上/下)单个时间单元,不更改更大的字段。例如,要将当前日期向上滚动一天,可以通过调用以下方法做到这一点: roll(Calendar.DATE, true)。

public void setTimeZone(TimeZone value)
        使用给定的时区值来设置时区。
   
    public TimeZone getTimeZone()
        获得时区。
   
    public void setLenient(boolean lenient)
        指定日期/时间解释是否是宽松的。
        对于宽松的解释,可以将诸如 "February 942, 1996" 之类的日期视为等同于 1996 年 1 月 1 日后的第 941 天。而对于严格的(non-lenient)解释,这样的日期会导致抛出异常。默认情况下是宽松的。
   
    public boolean isLenient()
        判断日期/时间的解释是否为宽松的。
   
    public void setFirstDayOfWeek(int value)
        设置一星期的第一天是哪一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY。
   
    public int getFirstDayOfWeek()
        获取一星期的第一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY。

3.DateFormat
    DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间.
    日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化.
    将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年 1 月 1 日 00:00:00 这一刻开始的毫秒数.
   
    DateFormat 提供了很多类方法,
        public static final DateFormat getInstance()
        public static final DateFormat getTimeInstance()
        public static final DateFormat getTimeInstance(int style)
        public static final DateFormat getTimeInstance(int style, Locale aLocale)
        public static final DateFormat getDateInstance()
        public static final DateFormat getDateInstance(int style)
        public static final DateFormat getDateInstance(int style, Locale aLocale)
        public static final DateFormat getDateTimeInstance()
        public static final DateFormat getDateTimeInstance(int dateStyle, int timeStyle)
        public static final DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale)
    以获得基于默认或给定语言环境和多种格式化风格的默认日期/时间 Formatter。
    格式化风格(style参数)包括 FULL、LONG、MEDIUM 和 SHORT, 不带参数的版本使用 SHORT 格式的默认语言环境的默认格式化风格的格式器.
   
    public final String format(Date date)
        将一个 Date 格式化为日期/时间字符串
   
    public Date parse(String source) throws ParseException
        从给定字符串的开始解析文本,以生成一个日期。该方法不使用给定字符串的整个文本。
       
       
4.SimpleDateFormat
    SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类.
    SimpleDateFormat 使得可以选择任何用户定义的日期-时间格式的模式。
   
    (1)日期和时间模式
        日期和时间格式由日期和时间模式字符串指定。
        在日期和时间模式字符串中,未加引号的字母 A-Z和a-z 被解释为模式字母,用来表示日期或时间字符串元素。
        文本可以使用单引号 (') 引起来,以免进行解释。
        所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。
       
        定义了以下模式字母(所有其他字符 'A' 到 'Z' 和 'a' 到 'z' 都被保留):
              G -- Era 标志符 -- Text -- AD 
              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 -- 一天中的小时数(0-23) -- Number -- 0 
              k -- 一天中的小时数(1-24) -- Number -- 24 
              K -- am/pm 中的小时数(0-11) -- Number -- 0 
              h -- am/pm 中的小时数(1-12) -- Number -- 12 
              m -- 小时中的分钟数 -- Number -- 30 
              s -- 分钟中的秒数 -- Number -- 55 
              S -- 毫秒数 -- Number -- 978 
              z -- 时区 -- General time zone -- Pacific Standard Time; PST; GMT-08:00 
              Z -- 时区 -- RFC 822 time zone -- -0800 
        模式字母通常是重复的,其数量确定其精确表示, 详细的格式化及解析原则如下:
            Text: 对于格式化来说,如果模式字母的数量大于等于 4,则使用完全形式;
                否则,在可用的情况下使用短形式或缩写形式。
                对于解析来说,两种形式都是可接受的,与模式字母的数量无关。
            Number: 对于格式化来说,模式字母的数量是最小的数位,如果数位不够,则用 0 填充以达到此数量。
                对于解析来说,模式字母的数量被忽略,除非必须分开两个相邻字段。
            Year: 如果格式器的 Calendar 是格里高利历,则应用以下规则
                对于格式化来说,如果模式字母的数量为 2,则年份截取为 2 位数,否则将年份解释为 number,即用 0 填充.
                对于解析来说,如果模式字母的数量大于 2,则年份照字面意义进行解释,而不管数位是多少。
                    因此使用模式 "MM/dd/yyyy",将 "01/11/12" 解析为公元 12 年 1 月 11 日。
                在解析缩写年份模式("y" 或 "yy")时,SimpleDateFormat 必须相对于某个世纪来解释缩写的年份。
                    这通过将日期调整为 SimpleDateFormat 实例创建之前的 80 年和之后 20 年范围内来完成。
                    例如,在 "MM/dd/yy" 模式下,如果 SimpleDateFormat 实例是在 1997 年 1 月 1 日创建的,
                        则字符串 "01/11/12" 将被解释为 2012 年 1 月 11 日,
                        而字符串 "05/04/64" 将被解释为 1964 年 5 月 4 日。
                    在解析时,只有恰好由两位数字组成的字符串(如 Character.isDigit(char) 所定义的)被解析为默认的世纪。
                    其他任何数字字符串将照字面意义进行解释,
                        例如单数字字符串,3 个或更多数字组成的字符串,或者不都是数字的两位数字字符串(例如"-1")。
                        因此,在相同的模式下, "01/02/3" 或 "01/02/003" 解释为公元 3 年 1 月 2 日。
                        同样,"01/02/-3" 解析为公元前 4 年 1 月 2 日。
                否则,则应用日历系统特定的形式。
                    对于格式化和解析,如果模式字母的数量为 4 或大于 4,则使用日历特定的 long form。
                    否则,则使用日历特定的 short or abbreviated form。
            Month: 如果模式字母的数量为 3 或大于 3,则将月份解释为 text;否则解释为 number。
            General time zone: 如果时区有名称,则将它们解释为 text。
            RFC 822 time zone: 对于格式化来说,使用 RFC 822 4-digit 时区格式.
           
            SimpleDateFormat 还支持本地化日期和时间模式 字符串。
                在这些字符串中,以上所述的模式字母可以用其他与语言环境有关的模式字母来替换。
                SimpleDateFormat 不处理除模式字母之外的文本本地化;而由类的客户端来处理。
       
    (2)常用的方法
        public SimpleDateFormat()
            用默认的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
            注:此构造方法可能不支持所有语言环境。要覆盖所有地区,请使用 DateFormat 类中的工厂方法。
       
        public SimpleDateFormat(String pattern)
            用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
            注:此构造方法可能不支持所有语言环境。要覆盖所有语言环境,请使用 DateFormat 类中的工厂方法。

public SimpleDateFormat(String pattern, Locale locale)
            用给定的模式和给定语言环境的默认日期格式符号构造 SimpleDateFormat。
            注:此构造方法可能不支持所有语言环境。要覆盖所有语言环境,请使用 DateFormat 类中的工厂方法。    
       
        public SimpleDateFormat(String pattern, DateFormatSymbols formatSymbols)
            用给定的模式和日期符号构造 SimpleDateFormat。
       
        public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos)
            将给定的 Date 格式化为日期/时间字符串,并将结果添加到给定的 StringBuffer。
       
        public Date parse(String text, ParsePosition pos)
            解析字符串的文本,生成 Date。
            此方法试图解析从 pos 给定的索引处开始的文本。如果解析成功,
            则将 pos 的索引更新为所用最后一个字符后面的索引(不必对直到字符串结尾的所有字符进行解析),并返回解析得到的日期。
            更新后的 pos 可以用来指示下次调用此方法的起始点。
            如果发生错误,则不更改 pos 的索引,并将 pos 的错误索引设置为发生错误处的字符索引,并且返回 null。
       
        public Date parse(String source) throws ParseException
            继承自DateFormat, 从给定字符串的开始解析文本,以生成一个日期。该方法不使用给定字符串的整个文本。
       
        public String toPattern()
            返回描述此日期格式的模式字符串。
       
        public String toLocalizedPattern()
            返回描述此日期格式的本地化模式字符串。
       
        public void applyPattern(String pattern)
            将给定模式字符串应用于此日期格式。
       
        public void applyLocalizedPattern(String pattern)
            将给定的本地化模式字符串应用于此日期格式。
       
        public DateFormatSymbols getDateFormatSymbols()
            获取此日期格式的日期和时间格式符号的一个副本。
       
        public void setDateFormatSymbols(DateFormatSymbols newFormatSymbols)
            设置此日期格式的日期和时间格式符号。
       
       
5.DateFormatSymbols
    DateFormatSymbols 是一个公共类,用于封装可本地化的日期-时间格式化数据,如月名、星期几的名称和时区数据。
    DateFormat 和 SimpleDateFormat 都使用 DateFormatSymbols 封装此信息。
   
    通常不应直接创建对象,可通过DateFormate或SimpleDateFormat对象取得之后,作修改,然后设置.
        SimpleDateFormat sdf = new SimpleDateFormat();
        DateFormatSymbols dfSymbols = sdf.getDateFormatSymbols();
  dfSymbols.setAmPmStrings(new String[] {"上午am", "下午pm"});
  sdf.setDateFormatSymbols(dfSymbols);
       
    public static final DateFormatSymbols getInstance()
        获取默认语言环境的 DateFormatSymbols 实例。
        此方法可访问 Java 运行时本身以及已安装 DateFormatSymbolsProvider 实现所支持的语言环境的 DateFormatSymbols 实例。    
       
    public static final DateFormatSymbols getInstance(Locale locale)
        获取指定语言环境的 DateFormatSymbols 实例。
        此方法可访问 Java 运行时本身以及已安装 DateFormatSymbolsProvider 实现所支持的语言环境的 DateFormatSymbols 实例。    
       
    public String[] getEras()
        获取年代字符串。例如:"AD" 和 "BC"。    
       
    public void setEras(String[] newEras)
        设置年代字符串。例如:"AD" 和 "BC"。    
       
    public String[] getMonths()
        获取月份字符串。例如:"January"、"February" 等等。    
       
    public void setMonths(String[] newMonths)
        设置月份字符串。例如:"January"、"February" 等等。    
       
    public String[] getShortMonths()
        获取简短形式的月份字符串。例如:"Jan"、"Feb" 等等。    
       
    public void setShortMonths(String[] newShortMonths)
        设置简短形式的月份字符串。例如:"Jan"、"Feb" 等等    
       
    public String[] getWeekdays()
        获取星期字符串。例如:"Sunday"、"Monday" 等等。    
       
    public void setWeekdays(String[] newWeekdays)
        设置星期字符串。例如:"Sunday"、"Monday" 等等。
       
    public String[] getShortWeekdays()
        获取简短形式的星期字符串。例如:"Sun"、"Mon" 等等。   
       
    public void setShortWeekdays(String[] newShortWeekdays)
        设置简短形式的星期字符串。例如:"Sun"、"Mon" 等等。

public String[] getAmPmStrings()
        获取 ampm 字符串。例如:"AM" 和 "PM"。

public void setAmPmStrings(String[] newAmpms)
        设置 ampm 字符串。例如:"AM" 和 "PM"。

Java日期时间实用工具类的更多相关文章

  1. java后端时间处理工具类,返回 "XXX 前" 的字符串

    转自:https://www.cnblogs.com/devise/p/9974672.html 我们经常会遇到显示 "某个之间之前" 的需求(比如各种社交软件,在回复消息时,显示 ...

  2. Java关于日期时间的工具类

    import java.sql.Timestamp; import java.text.ParseException; import java.text.ParsePosition; import j ...

  3. java日期格式转换工具类

    原文地址:http://blog.csdn.net/zhiweianran/article/details/7991531 package com.ace.backoffice.utils; impo ...

  4. [java工具类01]__构建格式化输出日期和时间的工具类

    在之前的学习中,我写过一篇关于字符串格式化的,就主要设计到了时间以及日期的各种格式化显示的设置,其主要时通过String类的fomat()方法实现的. 我们可以通过使用不同的转换符来实现格式化显示不同 ...

  5. Java日期时间API系列3-----Jdk7及以前的日期时间类的不方便使用问题

    使用Java日期时间类,每个人都很熟悉每个项目中必不可少的工具类就是dateutil,包含各种日期计算,格式化等处理,而且常常会遇到找不到可用的处理方法,需要自己新增方法,处理过程很复杂. 1.Dat ...

  6. Java日期时间API系列11-----Jdk8中java.time包中的新的日期时间API类,使用java8日期时间API重写农历LunarDate

    通过Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的优点,java8具有很多优点,现在网上查到的农历转换工具类都是基于jdk7及以前的类写的,下面使用ja ...

  7. Java中Date类型如何向前向后滚动时间,( 附工具类)

    Java中的Date类型向前向后滚动时间(附工具类) 废话不多说,先看工具类: import java.text.SimpleDateFormat; import java.util.Calendar ...

  8. Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类

    因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...

  9. Java日期时间API系列19-----Jdk8中java.time包中的新的日期时间API类,ZonedDateTime与ZoneId和LocalDateTime的关系,ZonedDateTime格式化和时区转换等。

    通过Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类中时间范围示意图:可以很清晰的看出ZonedDateTime相当于LocalDateTime+ZoneI ...

随机推荐

  1. 【转】网游服务器中的GUID(唯一标识码)实现-基于snowflake算法

    本文中的算法采用twitter的snowflake算法,具体请搜索介绍,原来是用Scala写的,因我项目需要,改写成C++语言,主要用于高效的生成唯一的ID, 核心算法就是毫秒级时间(41位)+机器I ...

  2. python numpy数据相减

    numpy数据相减,a和b两者shape要一样,然后是对应的位置相减.要不然,a的shape可以是(1,m),注意m要等于b的列数. import numpy as np a = [ [0, 1, 2 ...

  3. mysql中的select语句where条件group by ,having , order by,limit的顺序及用法

    -- 语法: SELECT select_list FROM table_name [ WHERE search_condition ] [ GROUP BY group_by_expression ...

  4. C++clock()延时循环

    函数clock(),返回程序开始执行后所用的系统时间,但是有两个复制问题. 1.clock()返回时间的单位不一定是秒 2.该函数的返回类型在某些系统上可能是Long,也可能是unsigned lon ...

  5. 机器学习(四)正则化与过拟合问题 Regularization / The Problem of Overfitting

    文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang 的个人 ...

  6. 使用树莓派实现(山寨)高清视频叠加(HDMI OSD)

    项目需要在HDMI上叠加一些字符包括汉字和数值,要求不能使用台式机,本身也没有HDMI采集卡驱动开发能力,所以通过海思的HDMI编码器将HDMI编码为h.264网络视频流,然后通过树莓派解码显示,做字 ...

  7. mysql下分组取关联表指定提示方法,类似于mssql中的cross apply

    转至:https://stackoverflow.com/questions/12113699/get-top-n-records-for-each-group-of-grouped-results ...

  8. Fluent Python: @property

    Fluent Python 9.6节讲到hashable Class, 为了使Vector2d类可散列,有以下条件: (1)实现__hash__方法 (2)实现__eq__方法 (3)让Vector2 ...

  9. 常用实例:js格式化手机号为3 4 4形式

    如何在填写手机号时将格式转换为3 4 4形式: 一:填写手机号时,在keyup事件中判断长度,符合条件时在值后面插入空格 $('#username').on('keyup',function(e){ ...

  10. Java学习个人备忘录之多线程

    进程:正在进行中的程序(直译). 线程:就是进程中一个负责程序执行的控制单元(执行路径) 一个进程中可以有多个执行路径,称之为多线程. 一个进程中至少要有一个线程. 开启多个线程是为了同时运行多部分代 ...