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

Sej*_*nus 75 java date-format

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

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

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

Thi*_*ilo 142

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

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

 "hh 'o''clock' a, zzzz"    12 o'clock PM, Pacific Daylight Time
Run Code Online (Sandbox Code Playgroud)

  • @Sotti:'46''.第一个逃脱第二个. (3认同)

Mar*_*mus 14

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

DateTimeFormatter.ofPattern("yyyy 'year'");
Run Code Online (Sandbox Code Playgroud)


R S*_*hko 7

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

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


Ole*_*.V. 7

时间

马克·杰罗尼姆斯已经说过了。我正在充实它一点。只需将要打印的文本逐字放在单引号内。

    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));
Run Code Online (Sandbox Code Playgroud)

刚才运行时的输出:

2010 year
2010 year
2019 year
Run Code Online (Sandbox Code Playgroud)

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

那么我们如何在格式中加上单引号呢?两个单引号产生一个。双单引号是否在单引号内并不重要:

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

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));
Run Code Online (Sandbox Code Playgroud)

太平洋夏令时间凌晨 2 点

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

    LocalTime time = LocalTime.parse("16 43' 56\"", formatterWithSingleQuote);
    System.out.println(time);
Run Code Online (Sandbox Code Playgroud)

16:43:56

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

链接