Java格式化时间新玩法

2023年 10月 1日 49.2k 0

常规方法格式化时间(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.time.format.DateTimeFormatter类。在Java 8及以上版本中,该类已经包含在java.time包中。

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

  • 使用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

    使用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)格式化

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

  • 年份:

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

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

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

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

    • 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 时区ID America/Los_Angeles; Z; -08:30
    z 时区名称 Pacific Standard Time; PST
    O 本地化时区漂移 GMT+8; GM T+08:00; UTC-08:00;
    X offset-X Z; -08; -0830; -08:30; -083015; -08:30:15;
    x offset-x +0000; -08; -0830; -08:30; -083015; -08:30:15;
    Z offset-Z +0000; -0800; -08:00;
    p pad modifier 1
    ' 分隔符
    '' 不被解析的文字
    [ 可选部分开始
    ] 可选部分结束
    # 保留字
    { 保留字
    保留字

    下面是一个示例:

    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
    

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论