获取计算机时间

问题描述 投票:-2回答:2

我想知道我怎么能知道这个简单的程序来替换"2016-yearOfBirth"字符串以"computer time - yearOfBirth"

我不知道如何设置电脑时间为int和如何进行?

public static void main(String[] args) {
    Scanner in;
    int yearOfBirth, years;
    in = new Scanner (System.in);
    System.out.print ("Year of Birth: ");
    yearOfBirth = in.nextInt();
    years = 2016 - yearOfBirth;
    System.out.println("You are almost "+years+" years old");
}
java datetime
2个回答
1
投票
years = Calendar.getInstance().get(Calendar.YEAR) - yearOfBirth;

1
投票

tl;dr

使用现代java.time类。

long age = 
    ChronoUnit.YEARS.between( 
        LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ,
        LocalDate.now( ZoneId.of( "Pacific/Auckland" ) )
    )
;

看到这个code run live at IdeOne.com

年龄:32

java.time

现代的方法是利用取代了与Java的早期版本中捆绑了可怕的日期,时间类java.time类。

LocalDate

LocalDate类表示没有时间的天,没有time zoneoffset-from-UTC日期,唯一的价值。

时区是在确定的日期是至关重要的。对于任何给定的时刻,日期由区全球各地的变化。例如,午夜Paris France几分钟后是新的一天,同时还“昨天”在Montréal Québec

如果没有指定时区,JVM的隐式应用当前默认时区。该默认可以在运行时(!)期间change at any moment,因此您的结果可能会有所不同。最好明确指定所需/预期的时区作为参数。

proper time zone name的格式指定一个Continent/Region,如America/MontrealAfrica/Casablanca,或Pacific/Auckland。切勿使用2-4个字母的缩写,如ESTIST,因为它们不是真正的时区,不规范,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "America/Montreal" ) ;  
LocalDate today = LocalDate.now( z ) ;

如果你想使用JVM当前的默认时区,要求它和作为参数传递。如果省略,代码变得暧昧阅读我们不知道做了肯定,如果你打算使用默认或者,如果你像这么多的程序员,不知道有问题的。

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.

或指定的日期。您可以通过多种设置月,与健全的编号1-12一月至十二月。

LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ;  // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.

或者,更好,使用Month枚举对象预先定义的,一个是一年中每个月。提示:使用整个代码库,而不是一个单纯的整数这些Month对象,使你的代码更自我记录,确保有效的值,并提供type-safety。同上,用于YearYearMonth

LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;

经过多年

为了确定年龄,使用日期时间的数学。对于短短数年,无月天,使用ChronoUnit

LocalDate then = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;
LocalDate now = LocalDate.now( ZoneId.of( "Africa/Tunis" ) ) ;
long age = java.time.temporal.ChronoUnit.YEARS.between( then , now  ) ;

年龄:32

多年来,月,日,使用Period类。

Period p = Period.between( then , now ) ;

p.toString():P32Y11M11D

您可以询问了年数的Period

int years = p.getYears() ;

年:32


About java.time

java.time框架是建立在Java 8和更高版本。这些类取代的麻烦老legacy日期时间类,如java.util.DateCalendar,与SimpleDateFormat

该项目Joda-Time,现在在maintenance mode,建议迁移到java.time类。

要了解更多信息,请参见Oracle Tutorial。和搜索堆栈溢出了很多例子和解释。规格是JSR 310

您可以直接与数据库交换java.time对象。使用符合JDBC driver或更高版本的JDBC 4.2。无需串,没有必要java.sql.*类。

从哪里获取java.time类?

该项目ThreeTen-Extra与java.time其他类延伸。该项目是为将来可能增加的java.time试验场。您可以在这里找到一些有用的类,如IntervalYearWeekYearQuartermore

© www.soinside.com 2019 - 2024. All rights reserved.