分享
三行代码  ›  专栏  ›  技术社区  ›  CNDyson

SimpleDataFormat能否打印时区?

  •  0
  • CNDyson  · 技术社区  · 5 天前

    2021-07-21 2:02:08.483 p.m. EDT

    你能 SimpleDateFormat 类打印“EDT”或“EST”,没有我硬编码吗?格式说明符是什么?到目前为止,我已经:

    yyyy-MM-dd HH:mm:ss.SSS a

    2 回复  |  直到 5 天前
        1
  •  4
  •   Arvind Kumar Avinash dreamcrash    5 天前

    java.time文件

    java.util 日期时间API及其格式API, SimpleDateFormat 过时且容易出错。建议完全停止使用,并切换到 modern Date-Time API *

    解决方案使用 java.time ,现代日期时间API:

    import java.time.ZoneId;
    import java.time.ZonedDateTime;
    import java.time.format.DateTimeFormatter;
    import java.util.Locale;
    
    public class Main {
        public static void main(String[] args) {
            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd H:mm:ss a zzz", Locale.CANADA);
            String strDateTime = ZonedDateTime.now(ZoneId.of("America/New_York")).format(dtf);
            System.out.println(strDateTime);
        }
    }
    

    输出:

    2021-07-21 10:34:12 a.m. EDT
    

    ONLINE DEMO

    了解有关现代日期时间API的更多信息,请访问 Trail: Date Time

    只是为了完整

    为了完整起见,下面给出了使用 日期格式

    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Locale;
    import java.util.TimeZone;
    
    public class Main {
        public static void main(String[] args) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd H:mm:ss a zzz", Locale.CANADA);
            sdf.setTimeZone(TimeZone.getTimeZone("America/New_York"));
            String strDateTime = sdf.format(new Date());
            System.out.println(strDateTime);
        }
    }
    

    输出:

    2021-07-21 10:36:52 a.m. EDT
    

    ONLINE DEMO


    *无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用 ThreeTen-Backport Java 6的功能;7.如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查 Java 8+ APIs available through desugaring How to use ThreeTenABP in Android Project .

        2
  •  0
  •   maio290    5 天前

    你只需要添加一个 z 按照你的模式-但下次, refer to the docs