2012-11-27 89 views
51

像上午小寫格式日期我正在顯示時間,這是說明(在大寫)上午或下午 我希望它後,下午 這是我的代碼日期格式化後的小寫字母顯示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); 
} 
} 
+0

'st.toLowerCase()'將做到這一點,沒有更簡單的方法。 –

+2

麻煩的是,AM/PM標記與月份和日期名稱一樣,是特定於語言環境的 - 在某些語言中強制所有內容爲小寫可能沒有意義(撇開一些語言僅使用24小時制的情況一切都沒有AM和PM的條款)。 –

回答

48

不幸的是,標準的格式化方法不會讓你這樣做。喬達也不例外。我想你將不得不通過簡單的後置格式替換來處理格式化的日期。

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

你可以使用使用regepxs的replaceAll()方法,但我覺得上面的也許是足夠的。我是而不是做了一個覆蓋toLowerCase(),因爲如果將來更改格式字符串以包含(比方說)月份名稱或類似字符,可能會造成格式化。

編輯:詹姆斯Jithin的解決方案看起來好了很多,和適當的方式做到這一點(如在評論中指出的)

+0

所有答案都正確或接近正確。但是答案很簡單,並且符合我的標準 – xrcwrn

+3

[答案](http://stackoverflow.com/a/13581910/1288725)由James Jithin發佈是完美的方法。 –

+0

我更喜歡Brian Agnew的解決方案。這是敏捷方法。可能工作的代碼量最少。 –

5

試試這個:

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

雖然你可以創建一個自定義格式的詳細herehere

可惜了box AM和PM的似乎並不在標準的SimpleDateFormat類定製

+1

這將使ntire字符串小寫,我猜OP只需要小寫am/pm,否則,它的一個很好的解決方案:) – PermGenError

+0

是的,我試過了,你是正確的@Brian阿格紐的答案是非常正確 – xrcwrn

+0

好點@Brian阿格紐。感謝您的指針... – RNJ

69

這工作

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

+1。尼斯。你能用Joda-Time做到嗎,你知道嗎? –

+1

@BrianAgnew,不確定,您可以嘗試更新從http://joda-time.sourceforge.net/api-release/org/joda/time/DateTimeUtils.html#getDateFormatSymbols%28java.util收到的DateFormatSymbols實例的屬性.Locale%29 –

+1

當在'SimpleDateFormate'中指定'Locale'時,使用'DateFormatSymbols'混淆它。您可能必須專門設置所有符號,而不僅僅是am/pm。 – Suragch

1

如果你想要比默認的AM,PM等不同風格詹姆斯的答案是偉大的。但恐怕你需要在區域設置和特定於區域設置的AM/PM之間進行映射來採用覆蓋。現在您只需使用java內置的java.util.Formatter類。因此,一個簡單的例子是這樣的:

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

它提供:

9pm 

要注意的是,如果你想上的情況下,只需更換 「%1 $ 牛逼 P」 與「%1 $ T p「。你可以在http://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html#dt找到更多的細節。

2

隨着的Java 8javax.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符號,這使得這是在最終字符串上進行字符串替換的唯一方法。

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()如果你想大寫

+0

這也會使月份小寫。 – paul

1
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); 
+0

簡單的核心。當然拍攝程序。 – Mourya

相關問題