如何从Java中的日期获取当前世纪?
例如,根据格式"06/03/2011"
的日期"MM/dd/yyyy"
。如何使用SimpleDateFormat
?
答案 0 :(得分:12)
Date date = new SimpleDateFormat("MM/dd/yyyy").parse(yourString);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int century = (calendar.get(Calendar.YEAR) / 100) +1;
答案 1 :(得分:11)
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;
}
}
答案 2 :(得分:3)
其他答案是正确但过时的。
java.time框架内置于Java 8及更高版本中。这些类取代了旧的麻烦日期时间类,例如java.util.Date
,.Calendar
和& java.text.SimpleDateFormat
。
现在在maintenance mode中,Joda-Time项目还建议迁移到java.time。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。
大部分java.time功能都被反向移植到Java 6& ThreeTen-Backport中的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的ordinal number,“二十一世纪”,加一个。
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
答案 3 :(得分:0)
我对Java一无所知,但为什么不只是获得全年并将最后2位数字设为0?
修改强>
如果您希望2011年成为21世纪 - 只需获得字符串格式的完全合格年份,然后敲掉最后2个字符,然后解析为int并添加1!
答案 4 :(得分:-1)
用斜线拆分它,得到结果数组中第三个元素的前两个符号,Integer.parseInt并加1,即:
String arr = myDate.split("/");
String shortYear = myDate[2].substring(0, 2);
int century = Integer.parseInt(shortYear) + 1;
(不确定我头顶的substring()语法)