从 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);
【讨论】:
无需使用SimpleDateFormat
。 Calendar#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 获取年份的主要内容,如果未能解决你的问题,请参考以下文章