gpt4 book ai didi

java - 在 Java 中定义一些特定的日期格式化程序作为枚举的成员

转载 作者:行者123 更新时间:2023-11-30 01:44:53 31 4
gpt4 key购买 nike

我需要跟踪一些格式(DateTimeFormatter 对象)以便在我的应用程序中重复使用。

➥ 如何使用 Java 枚举来表示这些格式化程序对象?

最佳答案

tl;博士

是的。

FormatDateOnly.DD_MM_YYYY.getFormatter()

详细信息

是的,您可以轻松存储一些DateTimeFormatter枚举中的对象。

圆滑的enum facility in Java相当强大且灵活。

基本上,Java 中的枚举几乎就是一个普通的 Java 类。您的枚举可以具有成员变量来在内部存储对象。您的枚举可以有一个构造函数,并且您可以将参数传递给这些构造函数。您可以在枚举上定义方法。

让我们将这 3 个功能放在这个示例类中,FormatDateOnly 枚举类。

我们在此枚举中定义了 3 个对象,分别名为 DD_MM_YYYYYYYY_MM_DDMM_DD_YYYY。构造每个时,我们分配一个 DateTimeFormatter 对象来保存在此枚举中。因为 java.time 类 ( tutorial ) 是 immutable并设计为 thread-safe ,我们甚至可以跨线程保留单个实例以供重用。枚举在 Java 中的工作方式是,当我们的类 FormatDateOnly 首次加载时,会调用三个构造函数中的每一个来为每个名称分配一个实例。

我们还传递一个字符串用作每个枚举的显示名称。我们看到它在 toString 重写方法中使用。

package work.basil.example;

import java.time.format.DateTimeFormatter;

public enum FormatDateOnly
{
DD_MM_YYYY( DateTimeFormatter.ofPattern( "dd.MM.uuuu" ) , "DD.MM.YYYY" ),
YYYY_MM_DD( DateTimeFormatter.ofPattern( "uuuu.MM.dd" ) , "YYYY.MM.DD" ),
MM_DD_YYYY( DateTimeFormatter.ofPattern( "MM.dd.uuuu" ) , "MM.DD.YYYY" );

private DateTimeFormatter formatter;
private String displayName;

FormatDateOnly ( DateTimeFormatter formatter , String displayName )
{
this.formatter = formatter;
this.displayName = displayName;
}

@Override
public String toString ( )
{
return "LocalDateFormat{" +
"displayName='" + this.displayName + '\'' +
'}';
}

public DateTimeFormatter getFormatter ( )
{
return this.formatter;
}

public String getDisplayName ( )
{
return this.displayName;
}
}

要使用这些枚举,我们引用所需的枚举对象,然后调用 getter 方法来检索该枚举对象中存储的 DateTimeFormatter

LocalDate localDate = LocalDate.of( 2020 , Month.JANUARY , 23 );

String output1 = localDate.format( FormatDateOnly.DD_MM_YYYY.getFormatter() );
String output2 = localDate.format( FormatDateOnly.MM_DD_YYYY.getFormatter() );
String output3 = localDate.format( FormatDateOnly.YYYY_MM_DD.getFormatter() );
  • 第一部分FormatDateOnly.DD_MM_YYYY引用三个预先存在的对象之一(在类加载时实例化)。
  • 第二部分,.getFormatter() 调用该特定枚举对象的 getter 方法,以检索传递给枚举构造函数的现有 DateTimeFormatter 对象。

转储到控制台。在 Java 13 上运行。

System.out.println( "localDate.toString() = " + localDate );
System.out.println( "output1 = " + output1 );
System.out.println( "output2 = " + output2 );
System.out.println( "output3 = " + output3 );

localDate.toString() = 2020-01-23

output1 = 23.01.2020

output2 = 01.23.2020

output3 = 2020.01.23

<小时/>

顺便说一句,我并不一定推荐这种安排。一般来说,最好让 java.time automatically localize生成表示日期时间对象的文本时。指定FormatStyle您想要结果字符串的长度或缩写。指定 Locale 以确定本地化所需的人类语言和文化规范。

Locale locale = Locale.CANADA_FRENCH ;
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT ).withLocale( locale ) ;
String output = localDate.format( formatter ) ;

20-01-23

关于java - 在 Java 中定义一些特定的日期格式化程序作为枚举的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58478829/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com