Java 获得计算机时间

Java 获得计算机时间,java,datetime,Java,Datetime,我想知道我如何告诉这个简单的程序,用“计算机时间-出生年份”字符串替换“2016年出生年份” 我不知道如何将计算机时间设置为整数,以及如何继续 public static void main(String[] args) { Scanner in; int yearOfBirth, years; in = new Scanner (System.in); System.out.print ("Year of Birth: "); yearOfBirth =

我想知道我如何告诉这个简单的程序,用
“计算机时间-出生年份”
字符串替换
“2016年出生年份”

我不知道如何将计算机时间设置为整数,以及如何继续

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");
}
tl;博士 使用现代java.time类

看这个

年龄:32

java.time 现代方法使用java.time类取代了与最早版本的java捆绑在一起的糟糕的日期时间类

LocalDate
该类表示一个只包含日期的值,不包含一天中的时间,也不包含或

时区对于确定日期至关重要。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,中午夜后几分钟是新的一天,而中仍然是“昨天”

如果未指定时区,JVM将隐式应用其当前默认时区。该默认值可能在运行时(!)期间出现,因此您的结果可能会有所不同。最好将所需/预期时区明确指定为参数

大陆/地区
的格式指定,例如
美国/蒙特利尔
非洲/卡萨布兰卡
,或
太平洋/奥克兰
。切勿使用2-4个字母的缩写,如
EST
IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)

如果要使用JVM的当前默认时区,请请求它并将其作为参数传递。如果省略,代码将变得模棱两可,我们无法确定您是否打算使用默认值,或者您是否像许多程序员一样不知道这个问题

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.
或者指定一个日期。你可以用一个数字来设置月份,1-12月的数字为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
对象,而不仅仅是一个整数,这样可以使代码更加自我记录,确保有效值,并提供更高的可用性。同上

逝去的岁月 要确定年龄,请使用日期时间数学。在几年内,没有几个月和几天,使用

年龄:32

对于年、月、日,使用类

p、 toString():P32Y11M11D

您可以查询
期间
的年数

int years = p.getYears() ;
年份:32


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*

long age = 
    ChronoUnit.YEARS.between( 
        LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ,
        LocalDate.now( ZoneId.of( "Pacific/Auckland" ) )
    )
;
从哪里获得java.time类

  • 、和更高版本-标准Java API的一部分,带有捆绑实现。
    • Java9添加了一些次要功能和修复
    • 大多数java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类

    • 对于早期的Android(可能是重复的我想这就是你要问的…当然,你只是想要
      yyy
      格式,它看起来像EOR@cricket\u 007不,如果我造成了任何误解,很抱歉,但我是新来的,我仍在试图理解它是如何工作的。顺便说一句,我需要用户在这里发布的字符串…但无论如何,谢谢你的帮助。)!仅供参考,非常麻烦的旧日期时间类,如,和
      java.text.simpleDataFormat
      ,现在已被java 8及更高版本中内置的类所取代。请参阅。
      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.
      
      LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;
      
      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  ) ;
      
      Period p = Period.between( then , now ) ;
      
      int years = p.getYears() ;