代码之家  ›  专栏  ›  技术社区  ›  karlgrz

获取Java中当前年份的整数值

  •  252
  • karlgrz  · 技术社区  · 17 年前

    我需要将Java中的当前年份确定为整数。我可以用 java.util.Date() ,但它已被弃用。

    12 回复  |  直到 8 年前
        1
  •  705
  •   cagcowboy    17 年前
    int year = Calendar.getInstance().get(Calendar.YEAR);
    

    不确定这是否符合不设置新日历的标准?(为什么反对这样做?)

        2
  •  166
  •   assylias    10 年前

    使用Java8的时间API(假设您很高兴在系统的默认时区中获得年份),您可以使用 the Year::now method :

    int year = Year.now().getValue();
    
        3
  •  27
  •   toolkit    17 年前

     int year = Calendar.getInstance().get(Calendar.YEAR);
    

    Date and Time API JSR 以及 Joda Time

        4
  •  16
  •   Youcef LAIDANI    8 年前

    您还可以从中使用2种方法 java.time.YearMonth (自Java 8以来):

    import java.time.YearMonth;
    ...
    int year = YearMonth.now().getYear();
    int month = YearMonth.now().getMonthValue();
    
        5
  •  14
  •   conmulligan    17 年前

    // year is stored as a static member
    int year = Calendar.getInstance().get(Calendar.YEAR);
    
        6
  •  13
  •   Basil Bourque    5 年前

    tl;博士

    ZonedDateTime.now(  ZoneId.of( "Africa/Casablanca" )  )
                 .getYear()
    

    时区

    The answer 通过 Raffi Khatchadourian 明智地展示如何使用新的 java.time package 在Java8中。但这一答案未能解决确定日期时的时区这一关键问题。

    int year=LocalDate.now().getYear();

    因此,您的结果可能会因运行它的机器、更改主机操作系统时区的用户/管理员或任何Java代码而有所不同 随时

    proper time zone names defined by the IANA . 切勿使用既不标准也不唯一的3-4字母代码。

    java.time

    java 8的java.time中的示例。

    int year = ZonedDateTime.now(  ZoneId.of( "Africa/Casablanca" )  ).getYear() ;
    

    一些想法如上所述,但使用 Joda-Time 2.7图书馆。

    int year = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).getYear() ;
    

    递增/递减年

    举例 java.time .

    ZonedDateTime zdt = 
        ZonedDateTime
        .now(  ZoneId.of( "Africa/Casablanca" )  )
        .minusYears( 1 ) 
    ;
    

    Joda Time 2.7中的示例。

    DateTime oneYearAgo = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).minusYears( 1 ) ;
    
        7
  •  10
  •   basZero A_M    14 年前

    如果需要任何日期对象的年份,我使用以下方法:

    public static int getYearFromDate(Date date) {
        int result = -1;
        if (date != null) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            result = cal.get(Calendar.YEAR);
        }
        return result;
    }
    
        8
  •  5
  •   Andrew T.    11 年前

    您还可以使用Java8 LocalDate

    import java.time.LocalDate;
    //...
    int year = LocalDate.now().getYear();
    
        9
  •  5
  •   KayV    6 年前

    对java 8使用以下代码:

    LocalDate localDate = LocalDate.now();
    int year = localDate.getYear();
    int month = localDate.getMonthValue();
    int date = localDate.getDayOfMonth();
    
        10
  •  4
  •   Alan    17 年前

    java.util.Date 是可变的。 java.util.Calendar 当其字段更新时出现性能问题,并且对于日期时间算法来说很笨拙。

        11
  •  3
  •   maral04    10 年前

    正如上面一些人回答的那样:

    如果以后要使用该变量,最好使用:

    int year;
    
    year = Calendar.getInstance().get(Calendar.YEAR);
    

    如果你只需要一个条件就需要一年,你最好使用:

    Calendar.getInstance().get(Calendar.YEAR)
    

    例如,在do中使用它时,检查引入年份不小于当前年份-200或大于当前年份(可以是出生年份):

    import java.util.Calendar;
    import java.util.Scanner;
    
    public static void main (String[] args){
    
        Scanner scannernumber = new Scanner(System.in);
        int year;
    
        /*Checks that the year is not higher than the current year, and not less than the current year - 200 years.*/
    
        do{
            System.out.print("Year (Between "+((Calendar.getInstance().get(Calendar.YEAR))-200)+" and "+Calendar.getInstance().get(Calendar.YEAR)+") : ");
            year = scannernumber.nextInt();
        }while(year < ((Calendar.getInstance().get(Calendar.YEAR))-200) || year > Calendar.getInstance().get(Calendar.YEAR));
    }
    
        12
  •  0
  •   Mayur Satav    5 年前

    在我的情况下,上述任何一项都不起作用。所以,在尝试了很多解决方案后,我找到了下面的一个,它对我很有效

    import java.util.Scanner;
    import java.util.Date;
    
    public class Practice
    {   
        public static void main(String[] args)
        {
            Date d=new Date();  
            int year=d.getYear();
            int currentYear=year+1900;    
    
            System.out.println(currentYear);
    
        }
    
    }
    
        13
  •  -1
  •   Alex Martian    6 年前

    在Java版本8+中,可以(建议)使用 java.time 图书馆 ISO 8601 YYYY-MM-DD java.time.Instant 使用它,所以 UTC ):

    import java.time.Instant;
    int myYear = Integer.parseInt(Instant.now().toString().substring(0,4));
    

    P.S.以防万一(并短接 String int ),使用 Calendar 看起来更好,并且可以使区域感知。

        14
  •  -2
  •   Ewan Makepeace    17 年前

    您可以使用整数数学完成整个过程,而无需实例化日历:

    return (System.currentTimeMillis()/1000/3600/24/365.25 +1970);
    

    新年的时候可能会休息一两个小时,但我不觉得这是个问题?

        15
  •  -5
  •   maxp    17 年前

    int[] int_dmy( long timestamp ) // remember month is [0..11] !!!
    {
      Calendar cal = new GregorianCalendar(); cal.setTimeInMillis( timestamp );
      return new int[] { 
        cal.get( Calendar.DATE ), cal.get( Calendar.MONTH ), cal.get( Calendar.YEAR )
      };
    };
    
    
    int[] int_dmy( Date d ) { 
     ...
    }