当前位置: 首页 > 知识库问答 >
问题:

Java:将时区添加到DateTimeFormatter

周高畅
2023-03-14
public class TimeZone
{
    public static void main(String[] args)
    {
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm:ss a z");
        System.out.println(now.format(formatter));
    }
}
Exception in thread "main" java.time.DateTimeException: Unable to extract value: class java.time.LocalDateTime
at java.time.format.DateTimePrintContext.getValue(Unknown Source)
at java.time.format.DateTimeFormatterBuilder$ZoneTextPrinterParser.format(Unknown Source)
at java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format(Unknown Source)
at java.time.format.DateTimeFormatter.formatTo(Unknown Source)
at java.time.format.DateTimeFormatter.format(Unknown Source)
at java.time.LocalDateTime.format(Unknown Source)
at tz.TimeZone.main(TimeZone.java:12)

下面是DateTimeFormatter API部分:

All letters 'A' to 'Z' and 'a' to 'z' are reserved as pattern letters. The following pattern letters are defined: 
  Symbol  Meaning                     Presentation      Examples
  ------  -------                     ------------      -------
   G       era                         text              AD; Anno Domini; A
   u       year                        year              2004; 04
   y       year-of-era                 year              2004; 04
   D       day-of-year                 number            189
   M/L     month-of-year               number/text       7; 07; Jul; July; J
   d       day-of-month                number            10

   Q/q     quarter-of-year             number/text       3; 03; Q3; 3rd quarter
   Y       week-based-year             year              1996; 96
   w       week-of-week-based-year     number            27
   W       week-of-month               number            4
   E       day-of-week                 text              Tue; Tuesday; T
   e/c     localized day-of-week       number/text       2; 02; Tue; Tuesday; T
   F       week-of-month               number            3

   a       am-pm-of-day                text              PM
   h       clock-hour-of-am-pm (1-12)  number            12
   K       hour-of-am-pm (0-11)        number            0
   k       clock-hour-of-am-pm (1-24)  number            0

   H       hour-of-day (0-23)          number            0
   m       minute-of-hour              number            30
   s       second-of-minute            number            55
   S       fraction-of-second          fraction          978
   A       milli-of-day                number            1234
   n       nano-of-second              number            987654321
   N       nano-of-day                 number            1234000000

   V       time-zone ID                zone-id           America/Los_Angeles; Z; -08:30
   z       time-zone name              zone-name         Pacific Standard Time; PST
   O       localized zone-offset       offset-O          GMT+8; GMT+08:00; UTC-08:00;
   X       zone-offset 'Z' for zero    offset-X          Z; -08; -0830; -08:30; -083015; -08:30:15;
   x       zone-offset                 offset-x          +0000; -08; -0830; -08:30; -083015; -08:30:15;
   Z       zone-offset                 offset-Z          +0000; -0800; -08:00;

有人能看出问题出在哪里吗?

共有1个答案

陆琦
2023-03-14

LocalDateTime有两个字段,类型为LocalDateLocalTime
LocalDate有字段
LocalTime有字段小时分钟纳米

没有任何地方是给出的时区。这是本质上的,因为LocalDateTime的javadoc表示:

没有时区的日期时间

System.out.println(time.atZone(ZoneOffset.UTC)
                       .format(DateTimeFormatter.ofPattern("hh:mm:ss a z")));
System.out.println(time.format(DateTimeFormatter.ofPattern("hh:mm:ss a z")
                                                .withZone(ZoneOffset.UTC)));
System.out.println(time.format(DateTimeFormatter.ofPattern("hh:mm:ss a 'Z'")));

例如。如果时区为-04:00,则使用zoneoffset.offhours(-4),您将得到:

晚上11:59:22-04:00

或者,如果您在纽约,使用zoneid.of(“america/new_york”),您将得到:

System.out.println(time.atZone(ZoneId.of("America/New_York"))
                       .format(DateTimeFormatter.ofPattern("hh:mm:ss a z")
                                                .withZone(ZoneOffset.UTC)));

 类似资料:
  • Spring非常出色地为注释提供了一个属性。我希望以编程方式提供带有时区的方法。 例如,假设我想在当地时间午夜打开洛杉矶和芝加哥大楼的灯。我想从我的存储库中获取建筑物。 时区可以在运行时提供还是以其他方式注入? 比如: 我知道方法不能接受任何参数,所以以这种方式提供时区是不行的。

  • 我有一个很愚蠢的问题。当我们向ArrayList添加一个int值时,它会创建该int值的新整数对象吗?例如: 在上面的代码中,“a”是一个值为1的原始类型,“list”是一个包含整数类型元素的数组列表。那么在“列表”中添加“a”时,“列表”如何将“a”视为整数?

  • 我有一个更新按钮按下的文本区域(此更新工作正常)。更新时,文本区域中会出现一个长列表,需要滚动条。然而,当我添加下面的最后两行时,不仅滚动条没有显示,文本也没有显示。如何修复此问题?(我不熟悉java swing,所以答案越简单越好)

  • 我试图通过调用:来添加视图和删除视图,具体取决于我的需要从我的 ListView 适配器 和 根据我的需要,当转换视图为空(第一次加载)它的工作原理找到,但当我刷新那个(转换视图不为空)我得到这个错误: 顺便说一句,最后一行是RelativeLayout。onLayout,但如果我的xml是带有LinearLayout子级的FrameLayout的话,这正常吗? 这是我的代码: 这些方法就是错误发

  • 我的任务是实现一个蛮力算法来输出一些n的整数[1,2,…, n]的所有排列。但是,我似乎在将ArrayList对象添加到HashSet时遇到了一些问题: 我发现对“nextPer的连续调用确实找到了所有排列,但是我不明白当我将排列添加到HashSet“allPer的排列”时会发生什么。我在n=3的情况下运行时得到的输出是这样的: [[3, 2, 1, 1, 2, 1, 1, 3, 1, 2], [