从java.util.Date获取年份

13

我在Cassandra列族中有一个日期列。使用Datastax Java API从该CF检索数据时,可以将此日期对象视为java.util.Date对象。

它有一个getYear()方法,但已弃用。相应的Javadoc说:

  

自JDK版本1.1起,由Calendar.get(Calendar.YEAR)- 1900替换。

如何正确地从此日期对象获取年、月、日属性?


2
如果您将值作为java.util.Date获取,那么您想使用哪个时区来表示这一年?Date只是一个时间点。 - Jon Skeet
可能是这个问题的重复:如何在Java中获取当前年份的整数值 - Basil Bourque
4个回答

31

你可以试着像这样做:

      // create a calendar
      Calendar cal = Calendar.getInstance();
      cal.setTime(datetime);  //use java.util.Date object as arguement
      // get the value of all the calendar date fields.
      System.out.println("Calendar's Year: " + cal.get(Calendar.YEAR));
      System.out.println("Calendar's Month: " + cal.get(Calendar.MONTH));
      System.out.println("Calendar's Day: " + cal.get(Calendar.DATE));

javadocs所述;

@Deprecated public int getYear() 已弃用。自JDK 1.1版本起,由Calendar.get(Calendar.YEAR) - 1900替代。返回一个数值,该数值是从此日期对象所代表的时间瞬间开始或包含的年份减去1900得到的,解释为本地时区。返回: 表示此日期的年份-1900。


2
在获取年份之前,您必须设置日期:cal.setTime(yourDateObjectFromCassandra); 然后您可以执行 cal.get(Calendar.YEAR); - Narmer
1
@JonSkeet 是的,但是 OP 想要 Cassandra 对象的年份,而不是当前年份。 - Narmer
1
你是对的 @Narmer,我根据问题标题回答了。 - Semih Eker
2
因为月份从0开始计数。1月=0,2月=1等。 - Semih Eker
2
@ChamilaWijayarathna 一月是0 - Narmer
显示剩余5条评论

1
使用Java8中的LocalDate对象。
Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
int year  = localDate.getYear();
int month = localDate.getMonthValue();
int day   = localDate.getDayOfMonth();

1
一个不错的选择是使用以下日期格式:
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy");
Date             date = sdf1.parse(datetime);
String           year = sdf2.format(date);

1
不需要使用SimpleDateFormat。使用Calendar#get即可,速度更快。 - Luiggi Mendoza

0

要检索日期和时间字段,您可以使用以下代码:

DateFormat.getDateTimeInstance().getCalendar().get(DateFormat.MONTH_FIELD)

只需将MONTH_FIELD替换为其他内容,如“DAY_OF_WEEK_FIELD”以检索一周中的某一天(我认为“1”代表星期一),或者使用“MINUTE_FIELD”来获取当前分钟等等 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接