如何从Java中的日期获取当前世纪?
例如,针对格式为"MM/dd/yyyy"
的日期"06/03/2011"
,如何使用SimpleDateFormat
获取当前世纪?
如何从Java中的日期获取当前世纪?
例如,针对格式为"MM/dd/yyyy"
的日期"06/03/2011"
,如何使用SimpleDateFormat
获取当前世纪?
对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;
}
}
Date date = new SimpleDateFormat("MM/dd/yyyy").parse(yourString);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int century = (calendar.get(Calendar.YEAR) / 100) +1;
(calendar.get(Calendar.YEAR) + 99 / 100)
这个公式,但如果你认为20世纪是从1900年到1999年,那么这个公式就是正确的。 - Peter Lawrey+1
... 我讨厌它。为什么只有程序员知道从零开始计数更有趣呢?0-99年应该是第0世纪。2000-2099年应该是第20世纪。难道还有比这更合乎逻辑的吗? - Martijn Courteaux其他回答是正确的,但已过时。
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的后备端口转移,并进一步适应了ThreeTenABP中的Android。
ThreeTen-Extra项目扩展了java.time的附加类。该项目是java.time可能未来添加的试验场。
LocalDate
LocalDate
类表示仅包含日期值而不包含时间和时区的值。
要解析,请指定格式化模式。顺便说一句,我建议使用ISO 8601标准格式,这些格式可以直接由java.time类解析。
String input = "06/03/2011";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "MM/dd/uuuu" ).withLocale ( Locale.US );
LocalDate ld = LocalDate.parse ( input , f );
要得到世纪,只需将年份除以100。如果您想要序数词,例如20xx的“二十一世纪”,则再加上1。
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 | centuryPart: 20 | centuryOrdinal: 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()语法不确定)