com.feilong.core.DatePattern Maven / Gradle / Ivy
Show all versions of feilong Show documentation
/*
* Copyright (C) 2008 feilong
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.feilong.core;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 常用的日期模式.
*
* 以下是常用的字段说明:
*
*
*
*
*
* Letter
* Date or Time Component
* Presentation
* 示例
*
*
*
* G
* Era designator
* Text
* AD,公元,公元前
*
*
*
* y
* Year
* Year
* 1996
; 96
*
*
*
* M
* Month in year
* Month
* July
; Jul
; 07
*
*
*
* w
* Week in year
* Number
* 27
*
*
*
* W
* Week in month
* Number
* 2
*
*
*
* D
* Day in year
* Number
* 189
*
*
*
* d
* Day in month
* Number
* 10
*
*
*
* F
* Day of week in month
* Number
* 2
*
*
*
* E
* Day in week
* Text
* Tuesday
; Tue
*
*
*
* EEEE
* 星期
*
* 星期二
*
*
*
* a
* Am/pm marker
* Text
* PM
*
*
*
* H
* Hour in day (0-23)
* Number
* 0
*
*
*
* k
* Hour in day (1-24)
* Number
* 24
*
*
*
* K
* Hour in am/pm (0-11)
* Number
* 0
*
*
*
* h
* Hour in am/pm (1-12)
* Number
* 12
*
*
*
* m
* Minute in hour
* Number
* 30
*
*
*
* s
* Second in minute
* Number
* 55
*
*
* S
* Millisecond
* Number
* 978
*
*
*
* z
* Time zone
* General time zone
* Pacific Standard Time
; PST
; GMT-08:00
*
*
*
* Z
* Time zone
* RFC 822 time zone
* -0800
*
*
*
*
*
*
* 关于yyyy 和 YYYY:
*
*
*
* 如果使用了YYYY的格式符来格式化日期,那么就有可能用错格式了.
* 那么日期为什么忽然变得不对了?原因是开发人员误用的格式符代表的是一种不同的日历系统.
*
*
* 现行的公历通常被称为格里高利历(Gregorian calendar),它以400年为一个周期,在这个周期中,一共有97个闰日,在这种历法的设计中,闰日尽可能均匀地分布在各个年份中,所以一年的长度有两种可能:365天或366天.
*
*
* 而本文提到的被错误使用的历法格式(YYYY),是国际标准ISO 8601所指定的历法.
*
* 这种历法采用周来纪日,样子看起来是这样的 :2009-W53-7.对于格里高利历中的闰日,它也采用"闰周"来表示,所以一年的长度是364或371天.
*
* 并且它规定,公历一年中第一个周四所在的那个星期,作为一年的第一个星期.
*
*
* 这导致了一些很有意思的结果,公历每年元旦前后的几天,年份会和ISO 8601纪年法差一年.
*
* 比如,2015年的第一个周四是1月1日,所以1月1日所在的那周,就变成了2015年的第一周.代表ISO 8601的格式符是YYYY,注意是大写的,而格里高利历的格式符是小写的yyyy,如果不小心把这两者搞混了,时间就瞬间推移了一年!维基百科上也有词条专门解释ISO
* 8601.
*
*
*
* 注意:YYYY是 jdk1.7+支持的格式,jdk1.7-的版本,{@link SimpleDateFormat}会抛异常
*
*
*
* @author feilong
* @see SimpleDateFormat
* @see com.feilong.lib.lang3.time.DateFormatUtils
* @see "org.springframework.format.annotation.DateTimeFormat"
* @see "java.time.format.DateTimeFormatter"
* @see
* 慎用Java日期格式化
* @see 各国的时间格式
* @see Dates in Chinese
* @since 1.0.2
*/
public final class DatePattern{
//---------------------------------------------------------------
/**
* 只有日期 年月日{@value}
.
*
* example:2012-01-22
*
*
* @see com.feilong.lib.lang3.time.DateFormatUtils#ISO_8601_EXTENDED_DATE_FORMAT
* @see "java.time.format.DateTimeFormatter#ISO_LOCAL_DATE"
* @see Date and time format - ISO 8601
*/
public static final String COMMON_DATE = "yyyy-MM-dd";
/**
* 不带秒 {@value}
.
*
*
* example: 2013-12-27 22:13
*
*/
public static final String COMMON_DATE_AND_TIME_WITHOUT_SECOND = "yyyy-MM-dd HH:mm";
/**
* {@value}
.
*
* example:2013-12-27 22:13:55
*
*/
public static final String COMMON_DATE_AND_TIME = "yyyy-MM-dd HH:mm:ss";
/**
* 带毫秒的时间格式 {@value}
.
*
*
* example: 2013-12-27 22:13:55.453
*
*/
public static final String COMMON_DATE_AND_TIME_WITH_MILLISECOND = "yyyy-MM-dd HH:mm:ss.SSS";
//---------------------------------------------------------------
/**
* (点号格式的) 只有日期 年月日{@value}
.
*
*
* example:2018.01.02
*
*
* @since 1.10.7
*/
public static final String DOTS_DATE = "yyyy.MM.dd";
/**
* (点号格式的)不带秒 {@value}
.
*
*
* example: 2018.01.02 22:13
*
*
* @since 1.10.7
*/
public static final String DOTS_DATE_AND_TIME_WITHOUT_SECOND = "yyyy.MM.dd HH:mm";
/**
* (点号格式的){@value}
.
*
*
* example:2018.01.02 22:13:55
*
*
* @since 1.10.7
*/
public static final String DOTS_DATE_AND_TIME = "yyyy.MM.dd HH:mm:ss";
/**
* (点号格式的)带毫秒的时间格式 {@value}
.
*
*
* example: 2018.01.02 22:13:55.453
*
*
* @since 1.10.7
*/
public static final String DOTS_DATE_AND_TIME_WITH_MILLISECOND = "yyyy.MM.dd HH:mm:ss.SSS";
//---------------------------------------------------------------
/**
* 只有时间且不带秒 {@value}
.
*
*
* example:21:57
*
*/
public static final String COMMON_TIME_WITHOUT_SECOND = "HH:mm";
/**
* 只有时间{@value}
.
*
* example:21:57:36
*
*
* @see com.feilong.lib.lang3.time.DateFormatUtils#ISO_8601_EXTENDED_TIME_FORMAT
* @see "java.time.format.DateTimeFormatter#ISO_LOCAL_TIME"
*/
public static final String COMMON_TIME = "HH:mm:ss";
/**
* 不带年 不带秒 {@value}
.
*
*
* example: 12-27 22:13
*
*/
public static final String COMMON_DATE_AND_TIME_WITHOUT_YEAR_AND_SECOND = "MM-dd HH:mm";
//---------------------------------------------------------------
/**
* 时间戳, 一般用于拼接文件名称{@value}
.
*
*
* example: 20131227215816
*
*/
public static final String TIMESTAMP = "yyyyMMddHHmmss";
/**
* 带毫秒的时间戳,{@value}
.
*
*
* example: 20131227215758437
*
*/
public static final String TIMESTAMP_WITH_MILLISECOND = "yyyyMMddHHmmssSSS";
//---------------------------------------------------------------
/**
* 年月 带水平线,一般用于分类日志,将众多日志按月分类 {@value}
.
*
*
* example: 2012-01
*
*/
public static final String YEAR_AND_MONTH = "yyyy-MM";
/**
* 月日 {@value}
.
*
*
* example: 01-22
*
*/
public static final String MONTH_AND_DAY = "MM-dd";
/**
* 月日带星期 {@value}
.
*
*
* example: 01-22(星期四)
*
*/
public static final String MONTH_AND_DAY_WITH_WEEK = "MM-dd(E)";
//---------------------------------------------------------------
/**
* 印尼日期格式 {@value}
.
*
*
* example: 31/03/2014 14:53:39
*
*
*
* 各国的时间格式参见 Date format by country
*
*
* @see 各国的时间格式
*
* @since 1.11.0
*/
public static final String INDONESIA_DATE = "dd/MM/yyyy";
/**
* 印尼 带时分秒的时间格式 {@value}
.
*
*
* example: 31/03/2014 14:53:39
*
*
*
* 各国的时间格式参见 Date format by country
*
*
* @see 各国的时间格式
*
* @since 1.11.0 change name from ddMMyyyyHHmmss to INDONESIA_DATE_AND_TIME
*/
public static final String INDONESIA_DATE_AND_TIME = "dd/MM/yyyy HH:mm:ss";
//---------------------------------------------------------------
/**
* MM月份 {@value}
.
*
*
* example: 12
*
*/
public static final String MM = "MM";
/**
* The ISO date formatter that formats or parses a date without an offset, such as '20111203' ,
* {@value}
.
*
*
* example: 20131227
*
*
* @see "java.time.format.DateTimeFormatter#BASIC_ISO_DATE"
*
* @since 1.11.0 change name from "yyyyMMdd" to BASIC_ISO_DATE
*/
public static final String BASIC_ISO_DATE = "yyyyMMdd";
/**
* 二十四小时制小时 {@value}
.
*
*
* example: 21
*
*/
public static final String HH = "HH";
//---------------------------------------------------------------
/**
* 系统 {@link Date#toString()}使用的格式,并且{@link java.util.Locale#US} {@value}
.
*
*
* example: 星期五 十二月 27 22:13:55 CST 2013
*
*
* @see Date#toString()
* @see com.feilong.lib.lang3.time.DateFormatUtils#SMTP_DATETIME_FORMAT
*/
public static final String TO_STRING_STYLE = "EEE MMM dd HH:mm:ss zzz yyyy";
//---------------------------------------------------------------
/**
* 中文日期格式,年月日{@value}
.
*
* example:2015年07月17日
*
*
* @since 1.2.2
* @since 1.11.0 rename from CHINESE_COMMON_DATE to CHINESE_DATE
*/
public static final String CHINESE_DATE = "yyyy年MM月dd日";
/**
* 中文日期+时间格式 {@value}
..
*
* example: 2015年07月17日 15:33:00
*
*
* @since 1.2.2
* @since 1.11.0 rename from CHINESE_COMMON_DATE_AND_TIME to CHINESE_DATE_AND_TIME
*/
public static final String CHINESE_DATE_AND_TIME = "yyyy年MM月dd日 HH:mm:ss";
//---------------------------------------------------------------
/** Don't let anyone instantiate this class. */
private DatePattern(){
//AssertionError不是必须的. 但它可以避免不小心在类的内部调用构造器. 保证该类在任何情况下都不会被实例化.
//see 《Effective Java》 2nd
throw new AssertionError("No " + getClass().getName() + " instances for you!");
}
}