为什么 Java 的 Date.getYear() 返回 111 而不是 2011?
我在将字符串日期解析为 Date
对象时遇到了一些麻烦。我使用 DateFormat
来解析字符串,当我打印日期值时,它给出了我所期望的结果。
但是当我尝试获取日期、月份或年份时,它给了我错误的值。例如,年份是 2011 年,但是当我执行 .getYear()
时,它给了我 111。我不知道为什么会发生这种情况。以下是相关的代码段:
Date dateFrom = null;
String gDFString = g.getDateFrom();
System.out.println(gDFString);
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
try {
dateFrom = df.parse("04/12/2011");
System.out.println(dateFrom);
System.out.println(dateFrom.getYear());
} catch (ParseException e) {
e.printStackTrace();
}
当我输出 dateFrom
时,我得到 Sun Dec 04 00:00:00 GMT 2011
,这正是您所期望的。但打印 .getYear()
返回 111
。
我需要能够获取时间序列图的日期、月份和年份。
I am having a bit of trouble parsing a string date to a Date
object. I use a DateFormat
to parse the string, and when I print the value of the date, it gives me what I expect.
But when I try get the day, the month or the year it gives me the wrong values. For instance, the year is 2011, but when I do .getYear()
it gives me 111. I have no idea why this is happening. Here is the relevant code segment:
Date dateFrom = null;
String gDFString = g.getDateFrom();
System.out.println(gDFString);
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
try {
dateFrom = df.parse("04/12/2011");
System.out.println(dateFrom);
System.out.println(dateFrom.getYear());
} catch (ParseException e) {
e.printStackTrace();
}
When I out print dateFrom
, I get Sun Dec 04 00:00:00 GMT 2011
, which is what you would expect. But printing .getYear()
returns 111
.
I need to be able to get the day, month and year of the date for a time series graph.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
这些方法已被弃用。相反,请使用 Calendar 类。
输出:
对于月份字段,这是从0开始的。这意味着 1 月 = 0 且 12 月 = 11。正如 javadoc 中所述,
Those methods have been deprecated. Instead, use the Calendar class.
Output:
And as for the month field, this is 0-based. This means that January = 0 and December = 11. As stated by the javadoc,
Javadoc 来救援:
您不应该使用已弃用的方法。已弃用的方法是不应再使用的方法。但无论您使用哪种方法,请阅读其 javadoc 以了解它的作用。
Javadoc to the rescue:
You should not use deprecated methods. Deprecated methods are methods which should not be used anymore. But whatever the method you're using, read its javadoc to know what it does.
邪恶总统成功了,
Date.getYear()
返回一个值,该值是从包含的年份中减去 1900 的结果。而你不应该使用它。但问题中代码的快速修复是:
President Evil nailed it,
Date.getYear()
returns a value that is the result of subtracting 1900 from the year that contains. And you you shouldn't use it.But quick fix for the code in the question is:
http://download .oracle.com/javase/1.4.2/docs/api/java/util/Date.html#getYear%28%29
规范指出它返回减去 1900 的年份。可能是避免的好主意也已弃用的方法。
http://download.oracle.com/javase/1.4.2/docs/api/java/util/Date.html#getYear%28%29
The specification states that it returns the year minus 1900. Probably a good idea to avoid deprecated methods as well.
太长了;博士
java.time
麻烦的
java.util.Date
类及其同级现在被优秀的 java.time 类所取代。java.time 类使用合理的编号,其中:
询问
LocalDate
的组成部分。您甚至可以要求自动本地化的月份名称和星期名称。
关于 java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧日期时间类,例如 java.util.Date、.Calendar 和 & 。
java.text.SimpleDateFormat
。Joda-Time 项目,现已在 维护模式,建议迁移到 java.time。
要了解更多信息,请参阅 Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。
许多 java.time 功能都向后移植到 Java 6 和 Java 6。 ThreeTen-Backport 中的 7 并进一步适应 Android 在 ThreeTenABP(请参阅如何使用...) 。
ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如
Interval
、YearWeek
、YearQuarter
等。tl;dr
java.time
The troublesome
java.util.Date
class and its siblings are now supplanted by the excellent java.time classes.The java.time classes utilize sane numbering, with:
Interrogate the
LocalDate
for its constituent parts.You can even ask for automatically localized name of month and name of day-of-week.
About java.time
The java.time framework is built into Java 8 and later. These classes supplant the troublesome old date-time classes such as
java.util.Date
,.Calendar
, &java.text.SimpleDateFormat
.The Joda-Time project, now in maintenance mode, advises migration to java.time.
To learn more, see the Oracle Tutorial. And search Stack Overflow for many examples and explanations.
Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport and further adapted to Android in ThreeTenABP (see How to use…).
The ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as
Interval
,YearWeek
,YearQuarter
, and more.这只是一个猜测,但 111 可能是自 1900 年以来的年数。查看文档/做一些测试来验证这一点(我目前无法检查)
This is only a guess, but the 111 could be the number of years since 1900. Take a look at documentation/do some tests to verify this (I can't check at the moment)