3 回答

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

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