likes
comments
collection
share

Java格式化时间新玩法

作者站长头像
站长
· 阅读数 26

常规方法格式化时间(SimpleDateFormat)

通常来讲,在Java中格式化时间,可以使用SimpleDateFormat类。以下是一个示例代码:

import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
    public static void main(String[] args) {
        // 获取当前时间
        Date now = new Date();

        // 创建SimpleDateFormat对象,指定日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        // 格式化时间
        String formattedTime = sdf.format(now);

        // 输出格式化后的时间
        System.out.println("Formatted time: " + formattedTime);
    }
}

在上面的示例中,我们使用SimpleDateFormat类来格式化时间。我们获取当前时间now,然后创建一个SimpleDateFormat对象sdf,并指定日期格式为"yyyy-MM-dd HH:mm:ss"。最后,我们使用sdf.format(now)方法将时间格式化为指定格式的字符串,并将其存储在formattedTime变量中。最后,我们将格式化后的时间输出到控制台。使用时可以根据自己的需求修改日期格式,例如"yyyy年MM月dd日 HH:mm:ss""MM/dd/yyyy HH:mm:ss"等。

格式化时间新玩法(DateTimeFormatter)

DateTimeFormatter是Java 8中引入的一个类,用于格式化和解析日期时间对象。它可以将日期时间对象转换为指定格式的字符串,也可以将字符串解析为对应的日期时间对象。

使用DateTimeFormatter需要先创建一个DateTimeFormatter对象,然后使用其提供的方法进行格式化或解析操作。常用的方法包括:

  • ofPattern(String pattern):根据指定的模式字符串创建一个DateTimeFormatter对象。
  • format(TemporalAccessor temporal):将指定的日期时间对象格式化为字符串。
  • parse(CharSequence text):将指定的字符串解析为日期时间对象。

本地化时间

DateTimeFormatter结合枚举FormatStyle定义的风格可以简单实现本地化时间的格式化

Java格式化时间新玩法

  1. 首先,需要导入java.time.format.DateTimeFormatter类。在Java 8及以上版本中,该类已经包含在java.time包中。

  2. 创建一个DateTimeFormatter对象,并使用ofLocalizedDateTime方法指定要使用的格式化风格和区域设置。例如,可以使用DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG).withLocale(Locale.CHINA)来创建一个适用于中国地区的长日期时间格式化器。

  3. 使用DateTimeFormatter的format方法将日期时间对象格式化为本地化的字符串。例如,可以使用formatter.format(LocalDateTime.now())来将当前日期时间格式化为本地化的字符串。

下面是示例代码:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Locale;

public class DateTimeFormatterExample {
    public static void main(String[] args) {
        // 创建一个适用于中国地区的长日期时间格式化器
        DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);

        // 将当前日期时间格式化为本地化的字符串
        String formattedDateTime = formatter.format(LocalDateTime.now());

        System.out.println("本地化时间:" + formattedDateTime);
    }
}

输出结果将会是类似于以下格式的本地化时间:

本地化时间:2023年9月30日 下午10时15分32秒

如果你时区在美国,格式化结果为:

Sep 30, 2023, 10:21:10 PM

ISO/RFC规范格式

ISO/RFC规范是一种常用的日期时间格式规范,可以使用DateTimeFormatter来实现。

以下是ISO/RFC规范中常用的日期时间格式及其对应的DateTimeFormatter格式化模式:

  • ISO日期格式(例如:2021-01-01):DateTimeFormatter.ISO_DATE
  • ISO时间格式(例如:10:30:00):DateTimeFormatter.ISO_TIME
  • ISO日期时间格式(例如:2021-01-01T10:30:00):DateTimeFormatter.ISO_DATE_TIME
  • ISO偏移日期时间格式(例如:2021-01-01T10:30:00+08:00):DateTimeFormatter.ISO_OFFSET_DATE_TIME
  • RFC_1123日期时间格式(例如:Fri, 01 Jan 2021 10:30:00 GMT):DateTimeFormatter.RFC_1123_DATE_TIME

Java格式化时间新玩法

使用DateTimeFormatter进行格式化示例代码:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        LocalDateTime dateTime = LocalDateTime.now();
        
        DateTimeFormatter isoDateFormatter = DateTimeFormatter.ISO_DATE;
        String isoDate = dateTime.format(isoDateFormatter);
        System.out.println("ISO日期格式:" + isoDate);
        
        DateTimeFormatter isoTimeFormatter = DateTimeFormatter.ISO_TIME;
        String isoTime = dateTime.format(isoTimeFormatter);
        System.out.println("ISO时间格式:" + isoTime);
        
        DateTimeFormatter isoDateTimeFormatter = DateTimeFormatter.ISO_DATE_TIME;
        String isoDateTime = dateTime.format(isoDateTimeFormatter);
        System.out.println("ISO日期时间格式:" + isoDateTime);
        
        DateTimeFormatter isoOffsetDateTimeFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
        String isoOffsetDateTime = dateTime.format(isoOffsetDateTimeFormatter);
        System.out.println("ISO偏移日期时间格式:" + isoOffsetDateTime);
        
        DateTimeFormatter rfc1123DateTimeFormatter = DateTimeFormatter.RFC_1123_DATE_TIME;
        String rfc1123DateTime = dateTime.format(rfc1123DateTimeFormatter);
        System.out.println("RFC_1123日期时间格式:" + rfc1123DateTime);
    }
}

输出结果如下:

ISO日期格式:2023-09-30
ISO时间格式:10:30:00
ISO日期时间格式:2023-09-30T10:30:00
ISO偏移日期时间格式:2023-09-30T10:30:00+08:00
RFC_1123日期时间格式:Sat, 30 Sep 2023 10:30:00 GMT

范式(Patterns)格式化

这种方式应该是我们最常用的方式了,范式格式化是一种用于格式化时间和日期的模式。下面是一些常见的时间日期范式及其对应的格式化方式:

  1. 年份:

    • YYYY:4位数字表示的年份,例如:2023
    • yyyy:4位数字表示的年份,例如:2023
    • YY:2位数字表示的年份,例如:23
  2. 月份:

    • MM:2位数字表示的月份,例如:01表示一月,12表示十二月
    • MMM:缩写形式的月份,例如:Jan表示一月,Dec表示十二月
    • MMMM:完整形式的月份,例如:January表示一月,December表示十二月
  3. 日:

    • DD dd:2位数字表示的日期,例如:01表示1号,31表示31号
  4. 星期几:

    • ddd:缩写形式的星期几,例如:Mon表示星期一,Sun表示星期日
    • dddd:完整形式的星期几,例如:Monday表示星期一,Sunday表示星期日
  5. 时间:

    • HH:24小时制的小时,例如:00表示午夜12点,23表示晚上11点
    • hh:12小时制的小时,例如:01表示上午1点,12表示下午12点
    • mm:分钟,例如:00表示整点,30表示30分钟
    • ss:秒,例如:00表示整分,59表示59秒
    • a:上午/下午标识,例如:AM表示上午,PM表示下午

表格整理:

符号含义示例
G显示纪元文本AD(公元)
u年份2004
У公元年份2004
D一年的第N天189
M或者L月份7;07; Jul; July;
d一个月的第N目10
Q或者q年份中的季度3; 03; Q3; 3rd quarter
Y以周为基础的年份1996;96
w以周为基础的年份中的周27
W一个月的第N周4
E星期Tue; Tuesday; T
e或者c本地化星期2; 02; Tue; Tuesday; T
F一个月的第N周3
a一天中的上午(am)或者下午(pm)PM
h上午下午12小时制(1-12)12
K上午下午11小时制(1-11)0
k上午下午(1-24)0
H小时制(0-23)0
m小时中的分钟30
s分秒55
S当前秒的毫秒978
A当前天的毫秒数1234
n当前秒的纳秒数987654321
N当前天的纳秒数1234000000
V时区IDAmerica/Los_Angeles; Z; -08:30
z时区名称Pacific Standard Time; PST
O本地化时区漂移GMT+8; GM T+08:00; UTC-08:00;
Xoffset-XZ; -08; -0830; -08:30; -083015; -08:30:15;
xoffset-x+0000; -08; -0830; -08:30; -083015; -08:30:15;
Zoffset-Z+0000; -0800; -08:00;
ppad modifier1
'分隔符
''不被解析的文字
[可选部分开始
]可选部分结束
#保留字
{保留字
保留字

下面是一个示例:

String pattern = "G uuuu'年'MMMd'日' ZZZZZ VV";
String format= DateTimeFormatter.ofPattern(pattern).format(ZonedDateTime.now());
System.out.println("格式化结果 = " + format);

运行结果:

格式化结果 = 公元 2023年9月30日 +08:00 Asia/Shanghai