【问题标题】:Java date format - including additional charactersJava 日期格式 - 包括附加字符
【发布时间】:2011-01-09 10:24:01
【问题描述】:

Java 中是否有等效于 php date() 样式的格式?我的意思是,在 php 中,我可以使用反斜杠转义字符来对它们进行字面处理。 IE。 yyyy \y\e\a\r 将变为 2010 年。我在 Java 中没有发现任何类似的东西,所有示例都只处理内置日期格式。

特别是,我处理 JCalendar 日期选择器及其 dateFormatString 属性。

我需要它,因为在我的语言环境中,需要以日期格式编写各种附加内容,例如 d. (代表日)日后部分,m。 (多年)多年后的一部分,依此类推。在最坏的情况下,我可以使用字符串替换或正则表达式,但也许有更简单的方法?提前致谢!

【问题讨论】:

标签: java date-format


【解决方案1】:

当然,使用 SimpleDateFormat 您可以包含文字字符串:

在日期和时间模式字符串中,从“A”到“Z”以及从“a”到“z”的不带引号的字母被解释为代表日期或时间字符串组成部分的模式字母。可以使用单引号 (') 引用文本以避免解释。 "''" 表示单引号。不解释所有其他字符;它们只是在格式化期间复制到输出字符串中,或​​者在解析期间与输入字符串匹配。

 "hh 'o''clock' a, zzzz"    12 o'clock PM, Pacific Daylight Time

【讨论】:

  • 超级,这正是我需要的。令人惊讶的是,我在网上浏览的众多示例中都没有找到这么简单的东西:) 非常感谢!
  • 如何转义引号字符?我正在尝试使用 mm' 格式做一些事情。表示例如 46 分钟,如 46'。
  • @Sotti:46''。第一个逃脱第二个。
  • 仅供参考,诸如 java.util.Datejava.util.Calendarjava.text.SimpleDateFormat 等非常麻烦的日期时间类现在是 legacy,被 Java 8 及更高版本中内置的 java.time 类所取代.
  • 这正是我想要的,谢谢!
【解决方案2】:

为了完整起见,Java 8 的 DateTimeFormatter 也支持这一点:

DateTimeFormatter.ofPattern("yyyy 'year'");

【讨论】:

    【解决方案3】:

    java.time

    Mark Jeronimus said it 已经。我正在充实它。只需将要打印的文本按字面意思放在单引号内即可。

        DateTimeFormatter yearFormatter = DateTimeFormatter.ofPattern("yyyy 'year'");
        System.out.println(LocalDate.of(2010, Month.FEBRUARY, 3).format(yearFormatter));
        System.out.println(Year.of(2010).format(yearFormatter));
        System.out.println(ZonedDateTime.now(ZoneId.of("Europe/Vilnius")).format(yearFormatter));
    

    刚刚运行时的输出:

    2010 year
    2010 year
    2019 year
    

    如果您使用DateTimeFormatterBuilder 及其appendPattern 方法,请以相同的方式使用单引号。或者使用它的appendLiteral 方法而不是单引号。

    那么,我们如何在格式中加上单引号呢?两个单引号产生一个。双单引号是否在单引号内都没关系:

        DateTimeFormatter formatterWithSingleQuote = DateTimeFormatter.ofPattern("H mm'' ss\"");
        System.out.println(LocalTime.now(ZoneId.of("Europe/London")).format(formatterWithSingleQuote));
    

    10 28' 34"

        DateTimeFormatter formatterWithSingleQuoteInsideSingleQuotes
                = DateTimeFormatter.ofPattern("hh 'o''clock' a, zzzz", Locale.ENGLISH);
        System.out.println(ZonedDateTime.now(ZoneId.of("America/Los_Angeles"))
                .format(formatterWithSingleQuoteInsideSingleQuotes));
    

    凌晨 2 点,太平洋夏令时间

    上面所有的格式化程序也可以用于解析。例如:

        LocalTime time = LocalTime.parse("16 43' 56\"", formatterWithSingleQuote);
        System.out.println(time);
    

    16:43:56

    近 10 年前提出这个问题时使用的 SimpleDateFormat 类是出了名的麻烦且早已过时。我建议您改用 java.time,这是现代 Java 日期和时间 API。这就是我展示这一点的原因。

    链接

    【讨论】:

      【解决方案4】:

      您可以使用 java.util.Formatter 中记录的 String.format:

      Calendar c = ...;
      String s = String.format("%tY year", c);
      // -> s == "2010 year" or whatever the year actually is
      

      【讨论】:

        【解决方案5】:

        java.text.SimpleDateFormat

        SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); 
        String formattedDate = formatter.format(date);
        

        您将在此处获得更多信息link text

        【讨论】:

          猜你喜欢
          • 2011-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-08
          • 2016-11-19
          • 1970-01-01
          • 2021-01-29
          • 2021-08-15
          相关资源
          最近更新 更多