亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將字符串轉換為Java中的日歷對象

將字符串轉換為Java中的日歷對象

慕村9548890 2019-12-11 15:09:56
我是Java新手,通常使用PHP。我正在嘗試轉換此字符串:2011年3月14日星期一格林尼治標準時間16:02:37放入Calendar對象,這樣我就可以像這樣輕松地提取Year和Month:String yearAndMonth = cal.get(Calendar.YEAR)+cal.get(Calendar.MONTH);手動解析它不是一個好主意嗎?使用子串方法?任何建議將幫助謝謝!
查看完整描述

3 回答

?
慕田峪9158850

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,和更多。



查看完整回答
反對 回復 2019-12-12
?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

好吧,我認為復制像這樣的類中已經存在的代碼將是一個壞主意SimpleDateFormat。


在另一方面,我個人會建議避免Calendar和Date完全如果可以的話,并使用約達時間,而不是作為一個更好的設計的日期和時間API。例如,你需要知道,SimpleDateFormat是不是線程安全的,所以你要么需要線程本地人,同步,或一個新實例每次使用它的時候。Joda解析器和格式化程序是線程安全的。



查看完整回答
反對 回復 2019-12-12
  • 3 回答
  • 0 關注
  • 531 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號