2021-04-18 11:36  阅读(77)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-date-time-methods.html

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);
  }
}

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

![2021041811318\_1.png][2021041811318_1.png]

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

我们可以使用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);
  }
}

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

![2021041811317\_2.png][2021041811317_2.png]

## 自定义日期格式与可选 ##

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

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

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

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);
  }
}

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

![2021041811316\_3.png][2021041811316_3.png]

## 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);

  }
}

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

![2021041811311\_4.png][2021041811311_4.png]

## 例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); 

  }
}

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

![2021041811310\_5.png][2021041811310_5.png]


[2021041811318_1.png]: https://www.cmsblogs.com/images/group/learningpath/java-rumen/2021041811318_1.png
[2021041811317_2.png]: https://www.cmsblogs.com/images/group/learningpath/java-rumen/2021041811317_2.png
[2021041811316_3.png]: https://www.cmsblogs.com/images/group/learningpath/java-rumen/2021041811316_3.png
[2021041811311_4.png]: https://www.cmsblogs.com/images/group/learningpath/java-rumen/2021041811311_4.png
[2021041811310_5.png]: https://www.cmsblogs.com/images/group/learningpath/java-rumen/2021041811310_5.png
点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java 自定义日期格式模式
上一篇
Java 预定义日期时间格式
下一篇
Java 特定区域格式