如何从Java中的日期获得当前世纪?
例如,"06/03/2011"根据格式的日期"MM/dd/yyyy".我怎样才能从这个日期开始使用SimpleDateFormat?
Har*_*ime 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;
Run Code Online (Sandbox Code Playgroud)
小智 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;
}
}
Run Code Online (Sandbox Code Playgroud)
其他答案是正确的但已过时。
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 );
Run Code Online (Sandbox Code Playgroud)
要获得世纪,只需将年份数字除以 100。如果您想要序数“二十一世纪”20xx,请加一。
int centuryPart = ( ld.getYear () / 100 );
int centuryOrdinal = ( ( ld.getYear () / 100 ) + 1 );
Run Code Online (Sandbox Code Playgroud)
转储到控制台。
System.out.println ( "input: " + input + " | ld: " + ld + " | centuryPart: " + centuryPart + " | centuryOrdinal: " + centuryOrdinal );
Run Code Online (Sandbox Code Playgroud)
输入: 06/03/2011 | LD: 2011-06-03 | 世纪部分:20 | 世纪序号:21
我对Java一无所知,但你为什么不直接获取全年并将最后两位数字设为0呢?
编辑
如果您希望 2011 年成为 21 世纪 - 只需获取字符串格式的完全限定年份,然后去掉最后 2 个字符,然后解析为 int 并加 1!