Java日期格式 - 包括其他字符

时间:2010-01-26 07:50:38

标签: java date-format

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

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

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

5 个答案:

答案 0 :(得分:132)

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

  

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

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

答案 1 :(得分:11)

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

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

答案 2 :(得分:7)

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

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

答案 3 :(得分:2)

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

将近十年前问这个问题时使用的SimpleDateFormat类非常麻烦,而且已经过时了。我建议您改用java.time,这是现代的Java日期和时间API。这就是为什么我要证明这一点。

链接

答案 4 :(得分:-4)

java.text.SimpleDateFormat中

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

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