我正试图在Eclipse中做一个简单的控制台显示,我的时间和日期直接来自计算机。出于某种原因,年份显示只有3个字符,而不是4个字符,我不知道为什么。任何帮助都将是惊人的。这是代码:
public class InClass3 implements ActionListener
{
static int month, day, year, hour, minute;
public static void Display()
{
int i;
String []Date = new String[3];
String []Hello = new String[3];
String []Time = new String[3];
Date();
Time();
for (i = 0; i < 3; i ++)
{
switch (i)
{
case 0:
Hello[0] = "HELLO WORLD";
Date[0] = month + "/" + day + "/" + year;
Time[0] = hour + ":" + minute;
break;
case 1:
Hello[1] = "hello world";
Date[1] = year + "." + month + "." + day;
if (hour > 12)
{
hour = hour - 12;
Time[1] = hour + ":" + minute + "pm";
}
else
{
Time[1] = hour + ":" + minute + "am";
}
break;
case 2:
Hello[2] = "Hello World";
Date[2] = day + " " + month + " " + year;
Time[2] = hour + ":" + minute;
break;
default: System.out.println("Fatal error occured. Please relaunch this application.");
}
System.out.println(Hello[i] + "n" + Date[i] + "n" + Time[i]);
}
}
@SuppressWarnings("deprecation")
public static void Time()
{
Date t = new Date();
hour = t.getHours();
minute = t.getMinutes();
}
@SuppressWarnings("deprecation")
public static void Date()
{
Date d = new Date();
year = d.getYear();
month = d.getMonth();
day = d.getDay();
}
public static void main(String[] args)
{
Display();
}
@Override
public void actionPerformed(ActionEvent arg0)
{
// TODO Auto-generated method stub
}
}
这就是它输出的:
你好世界
2015年3月5日
下午14:47
你好世界
115.3.5
下午2:47
Hello World
5 3 115
下午2:47
我显然希望它能展示2015年,而不是115年。感谢您的真知灼见。
year = d.getYear() + 1900;
这是因为年份被存储为自1900年以来的年数。
然而,Date
被弃用是有充分理由的。您应该使用Calendar
。
不要依赖Date
的类似get
的方法。它们已被弃用。
CCD_ 5方法返回日期"0";减去1900";,所以1999年是99,2000年是100,等等。你有一个Y2K错误!
退货:
该日期所代表的年份,减去1900。
相反,使用SimpleDateFormat
对象来控制您的格式设置。
SimpleDateFormat sdf = new SimpleDateFormat("M/d/yyyy");
System.out.println(sdf.format(new Date()));
https://docs.oracle.com/javase/8/docs/api/java/util/Date.html#getYear--
getYear@已弃用!!!
public int getYear()已弃用。从JDK 1.1版起,
替换为Calendar.get(Calendar.EYEAR)-1900。
返回一个值,该值是从包含此Date对象表示的即时时间或以该即时时间开始的年份减去1900的结果,在本地时区中进行解释。
退货:
该日期所代表的年份,减去1900。
您可以考虑Java 8中的更新选项https://docs.oracle.com/javase/8/docs/api/java/time/Year.html#now--
tl;dr
Year.now( ZoneID.of( "America/Montreal" ) )
.getValue()
详细信息
您使用的是麻烦的旧日期时间类,现在已被java.time类取代。
LocalDate
LocalDate
类表示一个仅限日期的值,没有一天中的时间和时区。
时区对于确定日期至关重要。在任何一个特定的时刻,日期都会因地区而异。例如,巴黎午夜过后几分钟,法国是新的一天,而魁北克省仍然是"昨天"。
ZoneId z = ZoneId.of( “America/Montreal” );
LocalDate today = LocalDate.now( z );
询问LocalDate
的年份号。
int year = today.getYear() ;
或者,使用Year
类。
int yearNumber = Year.now( ZoneId.of( "Pacific/Auckland" ) ).getValue() ;
关于java.time
java.time框架是在java 8及更高版本中构建的。这些类取代了诸如java.util.Date
、.Calendar
、&java.text.SimpleDateFormat
。
JodaTime项目现在处于维护模式,建议迁移到java.Time.
要了解更多信息,请参阅Oracle教程。并在Stack Overflow中搜索许多示例和解释。
大部分java.time功能都是向后移植到Java6&ThreeTen Backport中的7,并在ThreeTenABP中进一步适用于Android(请参阅如何使用…)。
ThreeTen Extra项目用额外的类扩展了java.time。这个项目是将来可能添加到java.time的试验场。您可以在这里找到一些有用的类,如Interval
、YearWeek
、YearQuarter
等等。