Yanıtlar:
int year = Calendar.getInstance().get(Calendar.YEAR);
Bunun yeni bir Takvim oluşturma kriterlerini karşılayıp karşılamadığından emin değil misiniz? (Neden böyle bir muhalefet?)
Calendar.getInstance().get(Calendar.YEAR)
dışsal olarak değiştirilen saat açısından atomiktir ve synchronized(c)
yerel bir değişkenin yeni bir örneğini yapmak burada bir şekilde anlamsız olacaktır.
import java.util.Calendar
Java 8'in zaman API'sini kullanarak, kullanabilirsiniz (sisteminizin varsayılan saat diliminde yıl olsun mutlu varsayarak) yöntemini :Year::now
int year = Year.now().getValue();
ZoneId
argüman now
JVM geçerli varsayılan bölge (çalışma sırasında herhangi bir anda değişebilir!) Dolaylı olarak güvenmek yerine geçirilmesini öneririz .
int year = Year.now(ZoneId.of("America/New_York")).getValue();
docs.oracle.com/javase/8/docs/api/java/time/Year.html#now--
Bu en basit (Takvim kullanarak üzgünüm):
int year = Calendar.getInstance().get(Calendar.YEAR);
Joda Time'ın yanı sıra yeni Date and Time API JSR de var
En kolay yol, yılı Takvim'den almaktır.
// year is stored as a static member
int year = Calendar.getInstance().get(Calendar.YEAR);
java.time.YearMonth
(Java 8'den beri) ' den 2 yöntem de kullanabilirsiniz :
import java.time.YearMonth;
...
int year = YearMonth.now().getYear();
int month = YearMonth.now().getMonthValue();
Herhangi bir date nesnesinin yılını istiyorsanız, aşağıdaki yöntemi kullandım:
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;
}
ZonedDateTime.now( ZoneId.of( "Africa/Casablanca" ) )
.getYear()
Cevap tarafından Raffi Khatchadourian akıllıca yeni nasıl kullanılacağını gösterir java.time paketi cevap Java 8'de Ama bu bir tarih belirlenmesinde zaman dilimine kritik sorunu gidermek için başarısız olur.
int yıl = LocalDate.now (). getYear ();
Bu kod JVM'nin geçerli varsayılan saat dilimine bağlıdır. Varsayılan bölge, günün tarihinin belirlenmesinde kullanılır. Örneğin, Paris'te gece yarısından sonra, Montréal'deki tarihin hala 'dün' olduğunu hatırlayın.
Dolayısıyla, sonuçlarınız hangi makinede çalıştığına, ana işletim sisteminin saat dilimini değiştiren bir kullanıcıya / yöneticiye veya herhangi bir anda JVM'nin geçerli varsayılanını değiştiren herhangi bir Java koduna göre değişebilir. Zaman dilimini belirtmek daha iyidir.
Bu arada, her zaman kullanmak uygun bir zaman dilimi isimleri olarak IANA'da tarafından tanımlanan . Hiçbir zaman standart veya benzersiz olmayan 3-4 harf kodunu kullanmayın.
Java 8'in java.time örneğidir.
int year = ZonedDateTime.now( ZoneId.of( "Africa/Casablanca" ) ).getYear() ;
Yukarıdaki gibi bazı fikirler, ancak Joda-Time 2.7 kitaplığını kullanma.
int year = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).getYear() ;
Hedefiniz bir kerede bir yıl atlamaksa, yıl sayısını çıkarmanıza gerek yoktur. Hem Joda-Time hem de java.time, bir seferde bir yıl ekleme / çıkarma yöntemlerine sahiptir. Ve bu yöntemler akıllıdır, Yaz Saati Uygulaması ve diğer anomalileri ele alır.
Joda-Time 2.7'de Örnek.
DateTime oneYearAgo = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).minusYears( 1 ) ;
tzdata
veri dosyasının yeni bir kopyasını kendiniz indirin. Dosyayı inceleyebilirsiniz. Java uygulamanızda eski bir tzdata'yı değiştirebilirsiniz. Oracle, JVM'leri için bir güncelleme aracı sağlar .
Java 8'leri de kullanabilirsiniz LocalDate
:
import java.time.LocalDate;
//...
int year = LocalDate.now().getYear();
Bazı insanların yukarıda yanıtladığı gibi:
Değişkeni daha sonra kullanmak istiyorsanız, daha iyi kullanın:
int year;
year = Calendar.getInstance().get(Calendar.YEAR);
Yıla sadece bir koşul için ihtiyacınız varsa daha iyi kullanın:
Calendar.getInstance().get(Calendar.YEAR)
Örneğin, yapılan denetimlerin yürürlüğe girdiği yıl, cari yıl-200'den veya cari yıldan daha az olmamak kaydıyla (doğum yılı olabilir):
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));
}
Benim durumumda yukarıdakilerin hiçbiri işe yaramadı. Bu yüzden bir çok çözüm denedikten sonra bir tane buldum ve benim için çalıştı
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);
}
}
Java 8+ sürümünde java.time kütüphanesini kullanabilir (tavsiye edilir) . ISO 8601 , tarih yazmak için standart bir yol belirler: YYYY-MM-DD
ve java.time.Instant
kullanır, bu nedenle (için UTC
):
import java.time.Instant;
int myYear = Integer.parseInt(Instant.now().toString().substring(0,4));
PS her durumda (ve almak için kısa String
değil int
), Calendar
daha iyi görünüyor ve bölgeye duyarlı hale getirilebilir.
Her şeyi bir takvim başlatmaya gerek kalmadan Tamsayı matematik kullanarak yapabilirsiniz:
return (System.currentTimeMillis()/1000/3600/24/365.25 +1970);
Yeni yılda bir veya iki saat kapalı olabilir ama bir sorun olduğu izlenimini edinmiyorum?
Gün / ay / yıl girişiyle çalışmak için kütüphanemdeki özel işlevleri kullanıyorum -
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 ) {
...
}
java.util.Date
bir değil , tüm sınıf kaldırıldığını değil Java 8. yöntemlerinden bazıları itibariyle kaldırılmış ancak. Ama hem kaçınmalısınızjava.util.Date
vejava.util.Calendar
onlar herkesin bildiği kafa karıştırıcı, zahmetli ve kusurlu oldukları gibi. Bunun yerine java.time (Java 8'de) veya Joda-Time kullanın .