date格式化后,以小写字母显示AM和PM

格式化date后,我显示的时间显示上午或下午(在大写)我希望它在小写像上午,下午这是我的代码

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

不幸的是,标准的格式化方法不会让你这样做。 Joda也不是。 我想你将不得不通过一个简单的后格式replace来处理你的格式化date。

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

你可以使用使用regepxs的replaceAll()方法,但是我认为上述可能就足够了。 我没有做一个毯子toLowerCase()因为这可能会搞砸格式,如果你将来改变格式string,以包含(比方说)月份名称或类似的。

编辑:詹姆斯Jithin的解决scheme看起来好多了,正确的方法来做到这一点(正如在评论中指出)

这工作

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

尝试这个:

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

虽然您可能可以创build一个自定义格式,如下所述

不幸的是,AM和PM似乎不能在标准的SimpleDateFormat类中定制

使用Java 8 javax.time

 Map<Long, String> ampm = new HashMap<>(); ampm.put(0l, "am"); ampm.put(1l, "pm"); DateTimeFormatter dtf = new DateTimeFormatterBuilder() .appendPattern("EM/dh:mm") .appendText(ChronoField.AMPM_OF_DAY, ampm) .toFormatter() .withZone(ZoneId.of("America/Los_Angeles")); 

有必要手动build立一个DateTimeFormatter甚至指定个别的部分,因为am / pm小写没有模式符号。 你可以在前后使用appendPattern

我相信没有办法替代默认的am / pm符号,这是在最终string上进行stringreplace的唯一方法。

詹姆斯的答案是非常好的,如果你想要不同的默认上午,下午。 但是恐怕您需要在区域设置和特定于区域设置的AM / PM之间进行映射来采用覆盖。 现在您只需使用java内置的java.util.Formatter类。 所以一个简单的例子看起来像这样:

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

它给:

 9pm 

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

只需像这样添加到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()如果你想大写