Java年份显示以3位数显示

  • 本文关键字:显示 3位 Java java date
  • 更新时间 :
  • 英文 :


我正试图在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的试验场。您可以在这里找到一些有用的类,如IntervalYearWeekYearQuarter等等。

最新更新