在日期格式化后以小写形式显示AM和PM

时间:2012-11-27 09:59:20

标签: java datetime simpledateformat

格式化日期时间后,时间以大写形式显示AM或PM,但我希望它以小写形式显示为am或pm。

这是我的代码:

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);
        System.out.println("time is " + ts);  
    }
}

8 个答案:

答案 0 :(得分:79)

这有效

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

答案 1 :(得分:64)

不幸的是,标准格式化方法不允许您这样做。乔达也不是。我认为你将不得不通过一个简单的后格式替换来处理你的格式化日期。

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

您可以使用使用regepxs的replaceAll()方法,但我认为上述内容可能就足够了。我做毯子toLowerCase(),因为如果您将来更改格式字符串以包含(比方说)月份名称或类似名称,这可能会搞砸格式化。

编辑:James Jithin's solution看起来好多了,正确的做法(如评论中所述)

答案 2 :(得分:6)

试试这个:

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

虽然您可以创建详细herehere

的自定义格式

不幸的是,box AM和PM似乎无法在标准的SimpleDateFormat类中进行自定义

答案 3 :(得分:4)

如果您不想进行字符串替换,并且正在使用Java 8 javax.time

Map<Long, String> ampm = new HashMap<>();
ampm.put(0l, "am");
ampm.put(1l, "pm");

DateTimeFormatter dtf = new DateTimeFormatterBuilder()
        .appendPattern("E M/d h:mm")
        .appendText(ChronoField.AMPM_OF_DAY, ampm)
        .toFormatter()
        .withZone(ZoneId.of("America/Los_Angeles"));

有必要手动构建DateTimeFormatter(指定单个部分),因为没有用于小写am / pm的模式符号。您可以在之前和之后使用appendPattern

我相信没有办法替换默认的am / pm符号,这是在最后一个字符串上进行字符串替换的唯一方法。

答案 4 :(得分:3)

Calendar c = Calendar.getInstance();

System.out.println("Current time => " + c.getTime());

SimpleDateFormat df = new SimpleDateFormat("HH:mm a");
String formattedDate = df.format(c.getTime());
formattedDate = formattedDate.replace("a.m.", "AM").replace("p.m.","PM");

TextView textView = findViewById(R.id.textView);
textView.setText(formattedDate);

答案 5 :(得分:1)

詹姆斯的答案很棒,如果你想要不同于默认的上午,下午的风格。但我担心您需要在Locale和Locale特定的AM / PM集之间进行映射以采用覆盖。现在您只需使用java内置的java.util.Formatter类。所以一个简单的例子如下:

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

它给出了:

9pm

要注意,如果您想要大写,只需将“%1 $ t p”替换为“%1 $ T p”。您可以在http://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html#dt找到更多详细信息。

答案 6 :(得分:0)

只需像这样添加toLowarCase()

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

toUpperCase()如果你想要大写

答案 7 :(得分:0)

    String today = now.format(new DateTimeFormatterBuilder()
            .appendPattern("MM/dd/yyyy ")
            .appendText(ChronoField.AMPM_OF_DAY)
            .appendLiteral(" (PST)")
            .toFormatter(Locale.UK));

//输出=> 2019年6月18日(PST)

Locale.UK => am或pm; Locale.US => AM或PM;根据您的需要尝试不同的语言环境(默认等)