从 java.util.Date 获取年份

Posted

技术标签:

【中文标题】从 java.util.Date 获取年份【英文标题】:get Year from java.util.Date 【发布时间】:2015-02-13 21:35:06 【问题描述】:

我在 Cassandra 列族中有一个日期列。当我使用 datastax java API 从这个 CF 检索数据时,这个日期对象可以被视为一个 java.util.Date 对象。

它有一个getYear() 方法,但已被弃用。对应的javadoc说:

从 JDK 1.1 版开始,由 Calendar.get(Calendar.YEAR) - 1900 取代。

如何从这个日期对象中正确获取年、月、日属性?

【问题讨论】:

如果您获得的值是java.util.Date,您想在一年中使用哪个时区? Date 只是一个时间点。 Get integer value of the current year in Java 的可能重复项 【参考方案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);

【讨论】:

无需使用SimpleDateFormatCalendar#get 又好又快。【参考方案2】:

你可以试试看吗?

      // 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 的结果 从此 Date 对象表示的时间瞬间开始,如 以当地时区解释。返回: 表示的年份 这个日期,减去 1900。

【讨论】:

你必须在获取年份之前设置日期:cal.setTime(yourDateObjectFromCassandra);然后你可以做cal.get(Calendar.YEAR); @JonSkeet 是的,但是 OP 想要 Cassandra 对象的年份,而不是当前年份 你是对的@Narmer,我根据问题的标题回答了。 因为月份从 0 开始。一月=0、二月=1 等等。 @ChamilaWijayarathna January is 0【参考方案3】:

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

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

只需将 MONTH_FIELD 替换为“DAY_OF_WEEK_FIELD”即可检索星期几(我认为“1”代表星期一)或当前分钟的“MINUTE_FIELD”等:)

【讨论】:

【参考方案4】:

在 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();

【讨论】:

以上是关于从 java.util.Date 获取年份的主要内容,如果未能解决你的问题,请参考以下文章

java怎么获得当前年月日并赋给变量?

java如何创建一个指定的日期对象?

无法从 String 值构造 java.util.Date 的实例 - 不是有效的表示

java获取当前日期时间:java.util.Date

日期和API

获取当前日期和时间