ZetCode

Java TextStyle 枚举

最后修改时间:2025 年 4 月 16 日

java.time.format.TextStyle 枚举定义了用于格式化和解析日期-时间文本的文本样式。 它与 DateTimeFormatter 一起使用,以控制文本的显示方式。 该枚举提供了多个格式化选项。

TextStyle 是不可变的和线程安全的。 它通常用于将日期、时间或日期-时间值格式化为字符串。 这些样式范围从全名到短缩写。 该枚举适用于区域设置敏感的文本。

TextStyle 枚举概述

TextStyle 提供了用于不同文本格式化样式的常量。 主要样式包括完整、简短和窄表示形式。 该枚举与 DateTimeFormatterBuilder 一起使用以自定义输出格式。

public enum TextStyle {
    FULL,
    FULL_STANDALONE,
    SHORT,
    SHORT_STANDALONE,
    NARROW,
    NARROW_STANDALONE
}

上面的代码显示了 TextStyle 提供的所有常量。 这些值控制日期-时间字符串中的文本格式。 当文本单独出现而不是出现在完整日期中时,使用 STANDALONE 变体。

基本 TextStyle 用法

使用 TextStyle 最简单的方法是使用 DateTimeFormatter。 每种样式都会为同一时间字段产生不同的输出。 该示例显示了月份格式。

Main.java
package com.zetcode;

import java.time.Month;
import java.time.format.TextStyle;
import java.util.Locale;

public class Main {

    public static void main(String[] args) {
        
        Month month = Month.JANUARY;
        Locale locale = Locale.US;
        
        System.out.println("FULL: " + 
            month.getDisplayName(TextStyle.FULL, locale));
        System.out.println("SHORT: " + 
            month.getDisplayName(TextStyle.SHORT, locale));
        System.out.println("NARROW: " + 
            month.getDisplayName(TextStyle.NARROW, locale));
    }
}

此示例演示了 Month 枚举的基本 TextStyle 用法。 输出显示了 1 月份的不同文本表示形式。 FULL 给出完整名称,SHORT 给出缩写,NARROW 给出最小表示形式。

独立样式与常规样式

当文本单独出现而不是出现在完整日期中时,TextStyle 提供独立变体以供使用。 某些语言对于这些情况有不同的形式。

Main.java
package com.zetcode;

import java.time.Month;
import java.time.format.TextStyle;
import java.util.Locale;

public class Main {

    public static void main(String[] args) {
        
        Month month = Month.JANUARY;
        Locale russian = new Locale("ru", "RU");
        
        System.out.println("FULL: " + 
            month.getDisplayName(TextStyle.FULL, russian));
        System.out.println("FULL_STANDALONE: " + 
            month.getDisplayName(TextStyle.FULL_STANDALONE, russian));
            
        System.out.println("SHORT: " + 
            month.getDisplayName(TextStyle.SHORT, russian));
        System.out.println("SHORT_STANDALONE: " + 
            month.getDisplayName(TextStyle.SHORT_STANDALONE, russian));
    }
}

此示例显示了俄语中常规样式和独立样式之间的差异。 像俄语这样的某些语言对于独立使用有不同的语法形式。 输出演示了 1 月份的这些变化。

星期几格式化

TextStyle 可以使用不同的样式格式化星期几。 该示例显示了以各种样式和区域设置格式化星期二。

Main.java
package com.zetcode;

import java.time.DayOfWeek;
import java.time.format.TextStyle;
import java.util.Locale;

public class Main {

    public static void main(String[] args) {
        
        DayOfWeek tuesday = DayOfWeek.TUESDAY;
        
        System.out.println("English FULL: " + 
            tuesday.getDisplayName(TextStyle.FULL, Locale.US));
        System.out.println("English SHORT: " + 
            tuesday.getDisplayName(TextStyle.SHORT, Locale.US));
            
        System.out.println("French FULL: " + 
            tuesday.getDisplayName(TextStyle.FULL, Locale.FRANCE));
        System.out.println("French NARROW: " + 
            tuesday.getDisplayName(TextStyle.NARROW, Locale.FRANCE));
    }
}

此示例演示了使用 TextStyle 进行星期几格式化。 输出显示了不同样式和语言的星期二。 请注意法语中的 NARROW 样式如何使用单个字符,而英语使用两个字符。

使用 DateTimeFormatter

TextStyle 通常与 DateTimeFormatter 一起使用以自定义日期格式。 该示例显示了使用特定文本样式构建格式化程序。

Main.java
package com.zetcode;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.util.Locale;

public class Main {

    public static void main(String[] args) {
        
        LocalDate date = LocalDate.of(2025, 4, 15);
        
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM dd, yyyy", Locale.US)
            .withTextStyle(TextStyle.FULL);
            
        System.out.println("Full style: " + date.format(formatter));
        
        DateTimeFormatter shortFormatter = DateTimeFormatter.ofPattern("MMM dd, yyyy", Locale.US)
            .withTextStyle(TextStyle.SHORT);
            
        System.out.println("Short style: " + date.format(shortFormatter));
    }
}

此示例显示了与 DateTimeFormatter 一起使用的 TextStyle。 格式化程序配置为对月份名称使用 FULL 或 SHORT 样式。 输出演示了格式化的差异。

区域设置敏感的格式化

TextStyle 根据区域设置生成不同的输出。 该示例显示了使用相同的文本样式,月份名称如何在不同语言之间变化。

Main.java
package com.zetcode;

import java.time.Month;
import java.time.format.TextStyle;
import java.util.Locale;

public class Main {

    public static void main(String[] args) {
        
        Month april = Month.APRIL;
        
        System.out.println("English: " + 
            april.getDisplayName(TextStyle.FULL, Locale.US));
        System.out.println("German: " + 
            april.getDisplayName(TextStyle.FULL, Locale.GERMANY));
        System.out.println("Japanese: " + 
            april.getDisplayName(TextStyle.FULL, Locale.JAPAN));
        System.out.println("Chinese: " + 
            april.getDisplayName(TextStyle.FULL, Locale.CHINA));
    }
}

此示例演示了使用 TextStyle 进行区域设置敏感的月份格式化。 输出显示了不同语言的“四月”。 每个区域设置对于同一个月份可能具有完全不同的文本表示形式。

组合 TextStyles

不同的 TextStyles 可以用于日期格式的不同部分。 该示例显示了具有混合样式的自定义格式。

Main.java
package com.zetcode;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.util.Locale;

public class Main {

    public static void main(String[] args) {
        
        LocalDate date = LocalDate.of(2025, 4, 15);
        
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE, MMMM dd, yyyy", Locale.US)
            .withTextStyle(TextStyle.FULL);
            
        System.out.println("Mixed styles: " + date.format(formatter));
        
        DateTimeFormatter shortDayFormatter = DateTimeFormatter.ofPattern("E, MMMM dd, yyyy", Locale.US)
            .withTextStyle(TextStyle.SHORT);
            
        System.out.println("Short day style: " + date.format(shortDayFormatter));
    }
}

此示例显示了在一个格式化程序中组合不同的文本样式。 该模式使用 EEEE 表示完整的星期几名称,MMMM 表示完整的月份名称。 第二个格式化程序使用 E 表示缩写的星期几名称。

来源

Java TextStyle 枚举文档

在本文中,我们介绍了 Java TextStyle 枚举的基本值和功能。 了解这些概念对于 Java 应用程序中的正确日期-时间文本格式化至关重要。

作者

我的名字是 Jan Bodnar,我是一位经验丰富的程序员。 我于 2007 年开始撰写编程文章,至今已撰写超过 1,400 篇文章和 8 本电子书。 凭借超过 8 年的教学经验,我致力于分享我的知识并帮助其他人掌握编程概念。

列出所有Java教程