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


87

Java中是否有等同于php date()样式格式的格式?我的意思是,在php中,我可以反斜杠转义字符以按字面意义对待它们。即yyyy \ y \ e \ a \ r将成为2010年。我没有在Java中找到任何类似的东西,所有示例仅处理内置日期格式。

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

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


1
对于在2019年或以后阅读此书的任何人来说,SimpleDateFormat在几个答案中使用的课程都非常麻烦且已过时。避开它。取而代之的是使用Mark Jeronimus的简短答案,该答案演示了Java.time(现代Java日期和时间API)的使用
Ole VV

Answers:


164

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

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

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

超级,那正是我需要的。令人惊讶的是,我在网络上浏览的众多示例中都没有找到这样简单的东西:)非常感谢!
Sejanus

1
如何转义引号字符?我正在尝试使用mm'格式。表示例如46分钟之类的46分钟。
索蒂2014年

3
@Sotti: 46''。第一逃脱第二。
Thilo 2014年

1
仅供参考,非常麻烦的日期,时间类,如java.util.Datejava.util.Calendarjava.text.SimpleDateFormat现在的遗产,由取代java.time内置到Java 8和更高等级。
罗勒·布尔克

24

仅出于完整性考虑,Java 8DateTimeFormatter还支持此功能:

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


4

java.time

马克Jeronimus说了。我再充实一点。只需将要打印的文本放在单引号内即可。

    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

如果使用aDateTimeFormatterBuilder及其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

java.text.SimpleDateFormat

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

您将在此处获得更多信息链接文本

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.