Java中的日期,如何操纵这一年?

时间:2012-07-19 15:35:15

标签: java date

我在Java中有一个Date对象。有时日期的年份设置为17.当我使用SimpleDateFormat输出它时,它将打印为0017.我所有的年份都将在2000年。有没有办法检查年份是否低于某个值,如果是,则加上2000?然后,一旦这样做,如何重新创建Date对象以使用新的一年?似乎不推荐使用Date对象中的所有内容。

5 个答案:

答案 0 :(得分:3)

我会使用日历:

Date myDate = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(myDate);
int year = cal.get(Calendar.YEAR);
if(year < 2000)
    cal.add(Calendar.YEAR, 2000); // add two thousand years

答案 1 :(得分:2)

如果您使用日历或Joda Time(更好的选择),您可以获取并设置年份(或其他字段)

你的年份不应该是17岁。我会尝试在源头纠正问题而不是稍后修补它。

答案 2 :(得分:1)

首先,Date.getYear返回CurrentYear - 1900,而不是2000,看起来你每次都要做这个增量。

但是因为它已被弃用,所以如果可能的话,你不应该首先使用它。 API建议您改为使用日历类:http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html

答案 3 :(得分:1)

java.time

如果用Date来表示java.util.Date,那可怕的设计类现在已经过时,几年前已被JSR 310中定义的 java.time 类所取代。

使用添加到旧类中的新方法将其替换为Instant

Instant instant = myJavaUtilDate.toInstant() ;

Instantjava.util.Date都表示UTC时刻。对于任何给定时刻,全球范围内的日期和时间都会有所不同。如果要通过特定时区的挂钟时间查看日期,请应用ZoneId以获得ZonedDateTime

ZoneID z = ZoneId.of( "Asia/Tokyo" ) ;
ZonedDatetTime zdt = instant.atZone( z ) ;

现在审问这一年。

int year = zdt.getYear() ;

调整。如果不同年份的日期无效(非leap年的2月29日),则ZonedDateTime类将进行调整。

if( year < 1000 ) {
    zdt = zdt.withYear( year + 2000 ) ; // You might also want to check for negative numbers. I'll omit that from this demo.
}

关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展了java.time。该项目为将来可能在java.time中添加内容提供了一个试验场。您可能会在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

答案 4 :(得分:0)

强烈建议使用Joda-Time。为什么? API更好,更直观,并且不会遇到困扰SimpleDateFormat等的线程问题。或者大量的弃用会淹没当前的Date API。