Java 自定义日期格式模式

2018-03-12 15:41 更新

Java日期时间 - 自定义日期格式模式


下面的列表显示了我们可以用来创建自定义数据格式模式的格式符号。

  • G
    时代
    例如:
        G     AD
        GGGG  Anno Domini
        GGGGG A    
        
  • u

    它可以是正数或负数。年是正数在一个时代开始日期之后。年份是时代开始日期之前的负数。2014年AD是2014年和2014年BC是-2014年。
    例如:
            u/uuu/uuuu 2014
            uu         12
            uuuuu      02014
        
  • y
    年代
    它计算从时代开始日期向前或向后的年份。它总是一个正数。2014年AD是2014年和2014年BC是2015年。在共同时代,0年是1 BC。
    例如:
        y/yyy/yyyy 2014
        yy         12
        yyyyy      02014
        
  • D
    一年中的(1 -366)
    例如:
    D 150
  • M/L
    月份
    例如:
    M    5
    MM   05
    MMM  Jul
    MMMM July
    
  • d
    日期
  • 例如:
    d    21
    dd   01
    ddd 001
    ddd 029
    
  • Q/q
    每年的季度
    例如:
        Q      3
        QQ     03
        QQQ    Q3
        QQQQ   3rd quarter
  • Y
    每周一年
    例如:
        Y        2014
        YY       12
        YYY/YYYY 2014    
        
  • w
    周为基础的年度
    例如:
        w 31
        
  • W
    周月
    例如:
    W 2
  • E
  • 星期中的一天
    例如:
        E     7
        EE    07
        EEE   Sun
        EEEEE Sunday
        
  • F
    每月的星期几
    例如:
    F 1
  • a
    上午/下午
    例如:
    a AM
  • h
    时钟小时AM/PM(1-12)
    例如:
    h 2
  • K
    上午/下午时间(0-11)
    例如:
    K 3
  • k
    时钟小时AM/PM(1-24)
    例如:
    k 7
  • H
    时段(0-23)
    例如:
        H 7
        HH 07
        
  • m
    分钟
    例如:
    mm 21
  • s
    秒钟
    例如:
    ss 12
  • S
    第二部分
    例如:
    SSSSSSSSS 000006789
  • A
    毫秒
    例如:
    A 12014012
  • n
    第二个纳秒
    例如:
    n 789
  • N
    纳秒
    例如:
    N 12014012001289
  • V
    时区ID
    例如:
    VV   America/Chicago
  • z
    时区名称
    例如:
    z   CDT
  • Z
    区域偏移
    例如:
        Z      -0500
        ZZ     -0500
        ZZZ    -05:00
        ZZZZ   GMT-05:00
        
  • O
    局部区偏移
    例如:
    O   GMT-5
  • X
    区域偏移
    例如:
            X       +09
            XX      +0930 
            XXX     +09:30
            XXX     -05:00
            XXXX    +093045
            XXXXX   +08:30:45
        
  • x
    与X相同,除了它为区域偏移零而不是“Z”打印“+00”。
    例如:
    xx -0500
  • p
    用空格填充模式。p的数量决定了输出的宽度。
    例如:
        mm      30
        pppmm " 30"
    
  • "
    文本转义。
    单引号内的文本直接输出。
    要输出单个报价,请使用两个连续的单引号。
    例如:
    "Hello" MMMM     Hello July
  • ""
    单引号
    例如:
    """Hello""" MMMM             "Hello" July
  • []
    符号[和]表示可选部分。 只有当信息可用于所有元素时,才会输出包含在可选节中的模式。
  • #, {, }
    保留供将来使用。

  • 例子

    import java.time.LocalDate;
    import java.time.Month;
    import java.time.format.DateTimeFormatter;
    import java.time.temporal.Temporal;
    import java.util.Locale;
    
    public class Main {
    
      public static void main(String[] args) {
        LocalDate ld = LocalDate.of(2014, Month.JUNE, 30);
        format(ld, "M/d/yyyy");
        format(ld, "MM/dd/yyyy");
        format(ld, "MMM   dd,   yyyy");
        format(ld, "MMMM   dd,   yyyy");
        format(ld, "EEEE, MMMM   dd,   yyyy");
        format(ld, ""Month" q  "in" QQQ");
      }
    
      public static void format(Temporal co, String pattern) {
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern(pattern);
        String str = fmt.format(co);
        System.out.println(pattern + ": " + str);
      }
    }
    

    上面的代码生成以下结果。

    使用区域设置的自定义日期格式

    我们可以使用DateTimeFormatter类的Ptern()方法创建一个具有指定格式模式和语言环境的DateTimeFormatter对象。

    static DateTimeFormatter ofPattern(String pattern)
    static DateTimeFormatter ofPattern(String pattern, Locale   locale)
    

    以下代码显示如何创建两个格式化程序,以便在默认语言环境和德语语言环境中以“Month day,Year”格式设置日期格式。

    DateTimeFormatter fmt1  = DateTimeFormatter.ofPattern("MMMM dd,   yyyy");
    
    DateTimeFormatter fmt2  = DateTimeFormatter.ofPattern("MMMM dd,   yyyy", Locale.GERMAN);
    

    DateTimeFormatter 类withLocale()方法从同一模式返回指定区域设置的DateTimeFormatter对象。

    DateTimeFormatter fmt2 = fmt1.withLocale(Locale.GERMAN);

    DateTimeFormatter 类中的 getLocale()方法返回当前格式化程序的语言环境。

    例2

    import java.time.LocalDate;
    import java.time.LocalTime;
    import java.time.Month;
    import java.time.ZoneId;
    import java.time.ZonedDateTime;
    import java.time.format.DateTimeFormatter;
    import java.time.temporal.Temporal;
    import java.util.Locale;
    
    public class Main {
    
      public static void main(String[] args) {
        LocalTime lt = LocalTime.of(16, 30, 5, 78899);
        format(lt, "HH:mm:ss");
        format(lt, "KK:mm:ss a");
        format(lt, "[MM-dd-yyyy][" at" HH:mm:ss]");
    
        ZoneId usCentral = ZoneId.of("America/Chicago");
        ZonedDateTime zdt = ZonedDateTime.of(LocalDate.now(), lt, usCentral);
        format(zdt, "MM/dd/yyyy HH:mm:ssXXX");
        format(zdt, "MM/dd/yyyy VV");
        format(zdt, "[MM-dd-yyyy][" at" HH:mm:ss]");
    
      }
    
      public static void format(Temporal co, String pattern) {
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern(pattern, Locale.US);
        String str = fmt.format(co);
        System.out.println(pattern + ": " + str);
      }
    }
    

    上面的代码生成以下结果。

    自定义日期格式与可选

    定义自定义日期时间格式时我们可以使用符号 [] 以标记可选部分。

    只有当信息可用于所有元素时,才会输出包含在可选节中的模式。

    以下代码显示如何使用可选格式。

    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import java.time.LocalTime;
    import java.time.Month;
    import java.time.format.DateTimeFormatter;
    
    public class Main {
    
      public static void main(String[] args) {
        String pattern = "MM/dd/yyyy[ "at" HH:mm:ss]";
        DateTimeFormatter fmt = DateTimeFormatter.ofPattern(pattern);
    
        LocalDate ld = LocalDate.of(2014, Month.JUNE, 30);
        LocalTime lt = LocalTime.of(17, 30, 12);
        LocalDateTime ldt = LocalDateTime.of(ld, lt);
    
        String str1 = fmt.format(ld);
        System.out.println(str1);
    
        String str2 = fmt.format(ldt);
    
        System.out.println(str2);
      }
    }
    

    上面的代码生成以下结果。

    Java DateTimeFormatterBuilder

    我们可以从 DateTimeFormatterBuilder 创建自定义日期时间格式。

    以下代码构建一个 DateTimeFormatter 对象以格式化日期格式,例如“YEAR中的新年度在WEEK_DAY”:

    import java.time.LocalDate;
    import java.time.Month;
    import java.time.format.DateTimeFormatter;
    import java.time.format.DateTimeFormatterBuilder;
    import java.time.format.TextStyle;
    import java.time.temporal.ChronoField;
    
    public class Main {
    
      public static void main(String[] args) {
        DateTimeFormatter formatter = new DateTimeFormatterBuilder()
        .appendLiteral("New Year in ")
        .appendValue(ChronoField.YEAR)
        .appendLiteral(" is  on  ")
        .appendText(ChronoField.DAY_OF_WEEK,TextStyle.FULL_STANDALONE)
        .toFormatter(); 
        LocalDate ld  = LocalDate.of(2014, Month.JANUARY, 1); 
        String str = ld.format(formatter); 
        System.out.println(str);
    
      }
    }
    

    上面的代码生成以下结果。

    例3

    我们可以使用DateTimeFormatterBuilder中的模式创建相同的自定义格式化程序。

    import java.time.LocalDate;
    import java.time.Month;
    import java.time.format.DateTimeFormatter;
    
    public class Main {
    
      public static void main(String[] args) {
        LocalDate ld  = LocalDate.of(2014,Month.JANUARY,1);
        String pattern = ""New Year in"  yyyy  "is on" EEEE"; 
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); 
        String str = ld.format(formatter);
        System.out.println(str); 
    
      }
    }
    

    上面的代码生成以下结果。

    以上内容是否对您有帮助:
    在线笔记
    App下载
    App下载

    扫描二维码

    下载编程狮App

    公众号
    微信公众号

    编程狮公众号