3 回答

TA貢獻1794條經驗 獲得超7個贊
現代方法使用java.time類。
YearMonth.from(
ZonedDateTime.parse(
"Mon Mar 14 16:02:37 GMT 2011" ,
DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" )
)
).toString()
2011-03
避免使用舊的日期時間類
現代方法是使用java.time類。諸如此類的舊日期時間類Calendar已被證明設計不良,令人困惑和麻煩。
定義一個自定義格式化程序以匹配您的字符串輸入。
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
解析為ZonedDateTime。
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
您對年度和月份感興趣。java.time類包括YearMonth用于該目的的類。
YearMonth ym = YearMonth.from( zdt );
您可以根據需要詢問年和月的數字。
int year = ym.getYear();
int month = ym.getMonthValue();
但是該toString方法會生成標準ISO 8601格式的字符串。
String output = ym.toString();
全部放在一起。
String input = "Mon Mar 14 16:02:37 GMT 2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "E MMM d HH:mm:ss z uuuu" );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
YearMonth ym = YearMonth.from( zdt );
int year = ym.getYear();
int month = ym.getMonthValue();
轉儲到控制臺。
System.out.println( "input: " + input );
System.out.println( "zdt: " + zdt );
System.out.println( "ym: " + ym );
輸入:2011年3月14日星期一格林尼治標準時間
zdt:2011-03-14T16:02:37Z [GMT]
ym:2011-03
現場代碼
請參閱在IdeOne.com中運行的代碼。
轉換次數
如果必須有一個Calendar對象,則可以GregorianCalendar使用添加到舊類的新方法轉換為。
GregorianCalendar gc = GregorianCalendar.from( zdt );
關于java.time
該java.time框架是建立在Java 8和更高版本。這些類取代麻煩的老傳統日期時間類,如java.util.Date,Calendar,和SimpleDateFormat。
現在處于維護模式的Joda-Time項目建議遷移到java.time。
要了解更多信息,請參見Oracle教程。并在Stack Overflow中搜索許多示例和說明。規格為JSR 310。
在哪里獲取java.time類?
Java SE 8和 SE 9及更高版本
內置的
標準Java API的一部分,具有捆綁的實現。
Java 9添加了一些次要功能和修復。
Java SE 6和 SE 7
java.time的許多功能在ThreeTen- Backport中都被反向移植到Java 6和7 。
安卓系統
所述ThreeTenABP項目適應ThreeTen-反向移植為Android(上面提到的)特異性。
請參閱如何使用…。
該ThreeTen-額外項目與其他類擴展java.time。該項目為將來可能在java.time中添加內容提供了一個試驗場。您可以在此比如找到一些有用的類Interval,YearWeek,YearQuarter,和更多。

TA貢獻1880條經驗 獲得超4個贊
好吧,我認為復制像這樣的類中已經存在的代碼將是一個壞主意SimpleDateFormat。
在另一方面,我個人會建議避免Calendar和Date完全如果可以的話,并使用約達時間,而不是作為一個更好的設計的日期和時間API。例如,你需要知道,SimpleDateFormat是不是線程安全的,所以你要么需要線程本地人,同步,或一個新實例每次使用它的時候。Joda解析器和格式化程序是線程安全的。
- 3 回答
- 0 關注
- 531 瀏覽
添加回答
舉報