Displaying AM and PM in lower case after date formatting

后端 未结 8 1106
谎友^
谎友^ 2020-11-27 06:40

After formatting a datetime, the time displays AM or PM in upper case, but I want it in lower case like am or pm.

This is my code:

public class Timei         


        
相关标签:
8条回答
  • 2020-11-27 06:48

    Try this:

    System.out.println("time is " + ts.toLowerCase());
    

    Although you may be able to create a custom format as detailed here and here

    Unfortunately out of the box the AM and PM do not seem to be customisable in the standard SimpleDateFormat class

    0 讨论(0)
  • 2020-11-27 06:48
        String today = now.format(new DateTimeFormatterBuilder()
                .appendPattern("MM/dd/yyyy ")
                .appendText(ChronoField.AMPM_OF_DAY)
                .appendLiteral(" (PST)")
                .toFormatter(Locale.UK));
    

    // output => 06/18/2019 am (PST)

    Locale.UK => am or pm; Locale.US => AM or PM; try different locale for your needs (defaul, etc.)

    0 讨论(0)
  • 2020-11-27 06:49

    This works

    public class Timeis {
        public static void main(String s[]) {
            long ts = 1022895271767L;
            SimpleDateFormat sdf = new SimpleDateFormat(" MMM d 'at' hh:mm a");
            // CREATE DateFormatSymbols WITH ALL SYMBOLS FROM (DEFAULT) Locale
            DateFormatSymbols symbols = new DateFormatSymbols(Locale.getDefault());
            // OVERRIDE SOME symbols WHILE RETAINING OTHERS
            symbols.setAmPmStrings(new String[] { "am", "pm" });
            sdf.setDateFormatSymbols(symbols);
            String st = sdf.format(ts);
            System.out.println("time is " + st);
        }
    }
    
    0 讨论(0)
  • 2020-11-27 06:49

    James's answer is great if you want different style other than default am, pm. But I'm afraid you need mapping between Locale and Locale specific AM/PM set to adopting the override. Now you simply use java built-in java.util.Formatter class. So an easy example looks like this:

    System.out.println(String.format(Locale.UK, "%1$tl%1$tp", LocalTime.now()));
    

    It gives:

    9pm
    

    To note that if you want upper case, just replace "%1$tp" with "%1$Tp". You can find more details at http://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html#dt.

    0 讨论(0)
  • 2020-11-27 07:04

    Unfortunately the standard formatting methods don't let you do that. Nor does Joda. I think you're going to have to process your formatted date by a simple post-format replace.

    String str = oldstr.replace("AM", "am").replace("PM","pm");
    

    You could use the replaceAll() method that uses regepxs, but I think the above is perhaps sufficient. I'm not doing a blanket toLowerCase() since that could screw up formatting if you change the format string in the future to contain (say) month names or similar.

    EDIT: James Jithin's solution looks a lot better, and the proper way to do this (as noted in the comments)

    0 讨论(0)
  • 2020-11-27 07:04

    just add toLowarCase() like this

    public class Timeis {
    public static void main(String s[]) {
          long ts = 1022895271767L;
          String st = null;  
          st = new SimpleDateFormat(" MMM d 'at' hh:mm a").format(ts).toLowerCase();
          System.out.println("time is " + ts);  
    }
    }
    

    and toUpperCase() if you want upper case

    0 讨论(0)
提交回复
热议问题