Java date format - including additional characters

前端 未结 5 1083
清歌不尽
清歌不尽 2020-12-05 03:50

Is there an equivalent to php date() style formatting in Java? I mean, in php I can backslash-escape characters to have them treated literally. I.e. yyyy \\y\\e\\a\\

相关标签:
5条回答
  • 2020-12-05 04:07

    java.time

    Mark Jeronimus said it already. I am fleshing it out a bit more. Just put the text to be printed literally inside single quotes.

        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));
    

    Output when running just now:

    2010 year
    2010 year
    2019 year
    

    If you are using a DateTimeFormatterBuilder and its appendPattern method, use single quotes in the same way. Or use its appendLiteral method instead and no single quotes.

    How do we put a single quote in the format, then? Two single quotes produce one. It doesn’t matter if the double single quote is inside single quotes or not:

        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));
    

    02 o'clock AM, Pacific Daylight Time

    All of the formatters above can be used for parsing too. For example:

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

    16:43:56

    The SimpleDateFormat class used when this question was asked nearly 10 years ago is notoriously troublesome and long outdated. I recommend that instead you use java.time, the modern Java date and time API. Which is why I demonstrate just that.

    Links

    • Oracle tutorial: Date Time explaining how to use java.time.
    • Documentation of DateTimeFormatter
    0 讨论(0)
  • 2020-12-05 04:08

    Sure, with the SimpleDateFormat you can include literal strings:

    Within date and time pattern strings, unquoted letters from 'A' to 'Z' and from 'a' to 'z' are interpreted as pattern letters representing the components of a date or time string. Text can be quoted using single quotes (') to avoid interpretation. "''" represents a single quote. All other characters are not interpreted; they're simply copied into the output string during formatting or matched against the input string during parsing.

     "hh 'o''clock' a, zzzz"    12 o'clock PM, Pacific Daylight Time
    
    0 讨论(0)
  • 2020-12-05 04:19

    java.text.SimpleDateFormat

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

    You'll get more info here link text

    0 讨论(0)
  • 2020-12-05 04:23

    You can use String.format as documented in java.util.Formatter:

    Calendar c = ...;
    String s = String.format("%tY year", c);
    // -> s == "2010 year" or whatever the year actually is
    
    0 讨论(0)
  • 2020-12-05 04:31

    Just for completeness, Java 8's DateTimeFormatter also supports this:

    DateTimeFormatter.ofPattern("yyyy 'year'");
    
    0 讨论(0)
提交回复
热议问题