[英]How to get Century from date in Java
如何從 Java 中的日期獲取當前世紀?
例如日期"06/03/2011"
根據格式"MM/dd/yyyy"
。 如何使用SimpleDateFormat
從該日期獲得當前世紀?
Date date = new SimpleDateFormat("MM/dd/yyyy").parse(yourString);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int century = (calendar.get(Calendar.YEAR) / 100) +1;
Harry Lime 發布的內容略有變化。 他的邏輯並不完全正確。 1901 年是 20 世紀,但 1900 年是 19 世紀。
public class CenturyYear {
public static void main(String[] args) {
int test = centuryFromYear(1900);
System.out.println(test);
}
static int centuryFromYear(int year) {
if (year % 100 == 0) {
year = year / 100;
} else {
year = (year / 100) + 1;
}
return year;
}
}
其他答案是正確的,但已過時。
java.time框架內置於 Java 8 及更高版本中。 這些類取代了舊的麻煩的日期時間類,例如java.util.Date
、 .Calendar
和java.text.SimpleDateFormat
。
現在處於維護模式, Joda-Time項目還建議遷移到 java.time。
要了解更多信息,請參閱Oracle 教程。 並在 Stack Overflow 上搜索許多示例和解釋。
java.time 的大部分功能向后移植到 ThreeTen - Backport 中的 Java 6 和 7,並進一步適應 ThreeT 中的Android 。
ThreeTen-Extra項目通過附加類擴展了 java.time。 該項目是未來可能添加到 java.time 的試驗場。
LocalDate
LocalDate
class 表示沒有時間和時區的僅日期值。
解析指定格式模式。 順便說一句,我建議使用可以由 java.time 類直接解析的 ISO 8601 標准格式。
String input = "06/03/2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "MM/dd/uuuu" ).withLocale ( Locale.US );
LocalDate ld = LocalDate.parse ( input , f );
要獲得世紀,只需將年份數除以 100。如果您想要序數,“二十一世紀”表示 20xx,請加一個。
int centuryPart = ( ld.getYear () / 100 );
int centuryOrdinal = ( ( ld.getYear () / 100 ) + 1 );
轉儲到控制台。
System.out.println ( "input: " + input + " | ld: " + ld + " | centuryPart: " + centuryPart + " | centuryOrdinal: " + centuryOrdinal );
輸入:06/03/2011 | ld: 2011-06-03 | 世紀部分:20 | 世紀序數:21
int century = (year + 99)/ 100;
我對 Java 一無所知,但您為什么不直接獲得全年並將最后兩位數字設為 0?
編輯
如果您希望 2011 年成為 21 世紀 - 只需獲取字符串格式的完全限定年份,然后敲掉最后 2 個字符,然后解析為 int 並加 1!
您只需返回 (year + 99) / 100
用斜杠分割它,得到結果數組中第三個元素的前兩個符號 Integer.parseInt 並加 1,即:
String arr = myDate.split("/");
String shortYear = myDate[2].substring(0, 2);
int century = Integer.parseInt(shortYear) + 1;
(不確定我腦海中的 substring() 語法)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.