有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java获得计算机时间

我想知道如何告诉这个简单的程序用"computer time - yearOfBirth"替换"2016-yearOfBirth"字符串

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

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");
}

共 (2) 个答案

  1. # 1 楼答案

    years = Calendar.getInstance().get(Calendar.YEAR) - yearOfBirth;
    
  2. # 2 楼答案

    tl;博士

    使用现代的java。时间课程

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

    看这个code run live at IdeOne.com

    age: 32

    爪哇。时间

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

    LocalDate

    ^{}类表示一个只包含日期的值,不包含一天中的时间,也不包含time zoneoffset-from-UTC

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

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

    Continent/Region的格式指定一个proper time zone name,例如America/MontrealAfrica/CasablancaPacific/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月的数字为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对象,而不仅仅是一个整数,以使代码更加自我记录,确保有效值,并提供type-safety。同上^{}&^{}

    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  ) ;
    

    age: 32

    对于年、月、日,使用^{}

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

    p.toString(): P32Y11M11D

    您可以询问Period的年数

    int years = p.getYears() ;
    

    years: 32


    关于java。时间

    java.time框架内置于Java8和更高版本中。这些类取代了麻烦的旧legacy日期时间类,如^{}^{}、&^{}

    现在位于maintenance modeJoda-Time项目建议迁移到java.time

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

    您可以交换java。时间对象直接与数据库连接。使用符合JDBC 4.2或更高版本的JDBC driver。不需要字符串,也不需要java.sql.*

    在哪里可以获得java。时间课

    {a38}项目扩展了java。额外上课的时间。这个项目是将来可能添加到java的一个试验场。时间您可以在这里找到一些有用的类,例如^{}^{}^{}more