जवाबों:
int year = Calendar.getInstance().get(Calendar.YEAR);
सुनिश्चित नहीं है कि यह एक नया कैलेंडर स्थापित करने के मानदंडों के साथ मिलता है या नहीं? (ऐसा करने का विरोध क्यों?)
Calendar.getInstance().get(Calendar.YEAR)
बाहरी रूप से घड़ी को बदलने के संबंध में परमाणु है, और synchronized(c)
स्थानीय चर के एक नए उदाहरण पर किसी भी तरह से यहां बहुत बेकार हो जाएगा।
import java.util.Calendar
जावा 8 के टाइम एपीआई (यह मानते हुए कि आप अपने सिस्टम के डिफ़ॉल्ट समय क्षेत्र में वर्ष प्राप्त करने के लिए खुश हैं) का उपयोग करकेYear::now
, आप इस विधि का उपयोग कर सकते हैं :
int year = Year.now().getValue();
ZoneId
रहने के now
बजाय वैकल्पिक तर्क को पारित करें (जो कि रनटाइम के दौरान किसी भी क्षण बदल सकता है!)।
int year = Year.now(ZoneId.of("America/New_York")).getValue();
docs.oracle.com/javase/8/docs/api/java/time/Year.html#now--
यह सबसे सरल (कैलेंडर का उपयोग करके, क्षमा करें) है:
int year = Calendar.getInstance().get(Calendar.YEAR);
नई तिथि और समय एपीआई JSR , साथ ही साथ Joda Time भी है
सबसे आसान तरीका कैलेंडर से वर्ष प्राप्त करना है।
// year is stored as a static member
int year = Calendar.getInstance().get(Calendar.YEAR);
आप java.time.YearMonth
(जावा 8 से) 2 विधियों का उपयोग कर सकते हैं :
import java.time.YearMonth;
...
int year = YearMonth.now().getYear();
int month = YearMonth.now().getMonthValue();
यदि आप किसी तिथि वस्तु का वर्ष चाहते हैं, तो मैंने निम्नलिखित विधि का उपयोग किया:
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()
Raffi Khatchadourian द्वारा उत्तर बुद्धिमानी से पता चलता है कि जावा 8 में नए java.time पैकेज का उपयोग कैसे किया जाता है । लेकिन यह उत्तर एक तिथि निर्धारित करने में समय क्षेत्र के महत्वपूर्ण मुद्दे को संबोधित करने में विफल रहता है।
int year = LocalDate.now ()। getYear ();
यह कोड JVM के वर्तमान डिफ़ॉल्ट समय क्षेत्र पर निर्भर करता है। डिफ़ॉल्ट ज़ोन का उपयोग यह निर्धारित करने में किया जाता है कि आज की तारीख क्या है। उदाहरण के लिए, याद रखें कि पेरिस में मध्यरात्रि के बाद के क्षण में मॉन्ट्रियल में तारीख अभी भी 'कल' है।
तो आपके परिणाम इस बात पर भिन्न हो सकते हैं कि यह किस मशीन पर चलता है, एक उपयोगकर्ता / व्यवस्थापक होस्ट ओएस समय क्षेत्र या किसी भी जावा कोड को किसी भी समय जेवीएम के वर्तमान डिफ़ॉल्ट को बदलकर बदल सकता है। समय क्षेत्र निर्दिष्ट करने के लिए बेहतर है।
वैसे, हमेशा उपयोग उचित समय क्षेत्र के नाम के रूप में IANA द्वारा परिभाषित । कभी भी 3-4 अक्षर कोड का उपयोग न करें जो न तो मानकीकृत हैं और न ही अद्वितीय हैं।
जावा 8 के जावा में उदाहरण।
int year = ZonedDateTime.now( ZoneId.of( "Africa/Casablanca" ) ).getYear() ;
ऊपर के रूप में कुछ विचार है, लेकिन का उपयोग कर जोडा-टाइम 2.7 पुस्तकालय ।
int year = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).getYear() ;
यदि आपका लक्ष्य एक बार में एक वर्ष कूदना है, तो वर्ष संख्या निकालने की कोई आवश्यकता नहीं है। Joda-Time और java.time दोनों में एक वर्ष में एक वर्ष जोड़ने / घटाने के तरीके हैं। और वे तरीके स्मार्ट हैं, डेलाइट सेविंग टाइम और अन्य विसंगतियों को संभालना।
उदाहरण Joda-Time 2.7 में।
DateTime oneYearAgo = DateTime.now( DateTimeZone.forID( "Africa/Casablanca" ) ).minusYears( 1 ) ;
tzdata
डेटा फ़ाइल की एक नई प्रतिलिपि स्वयं डाउनलोड करें। आप फ़ाइल का उपयोग कर सकते हैं। और आप अपने जावा कार्यान्वयन में एक पुरानी tzdata को बदल सकते हैं। Oracle उनके JVM के लिए एक अपडेटर टूल प्रदान करता है ।
यदि आपका एप्लिकेशन दिनांक और कैलेंडर ऑब्जेक्ट का भारी उपयोग कर रहा है, तो आपको वास्तव में Joda Time का उपयोग करना चाहिए, क्योंकि java.util.Date
यह परिवर्तनशील है। java.util.Calendar
जब उसके क्षेत्र अपडेट हो जाते हैं, तो प्रदर्शन समस्याएं होती हैं, और डेटाटाइम अंकगणित के लिए क्लंकी होता है।
आप जावा 8 का उपयोग भी कर सकते हैं LocalDate
:
import java.time.LocalDate;
//...
int year = LocalDate.now().getYear();
जैसा कि कुछ लोगों ने ऊपर बताया:
यदि आप बाद में चर का उपयोग करना चाहते हैं, तो बेहतर उपयोग करें:
int year;
year = Calendar.getInstance().get(Calendar.YEAR);
यदि आपको बेहतर स्थिति के लिए वर्ष की आवश्यकता है तो आप बेहतर उपयोग करें:
Calendar.getInstance().get(Calendar.YEAR)
उदाहरण के लिए, इसे उस वर्ष में उपयोग करते हुए, जो वर्ष की जाँच करता है, वर्तमान वर्ष की तुलना में कम नहीं है -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));
}
मेरे मामले में उपरोक्त में से कोई भी काम नहीं किया गया है। इसलिए बहुत सारे समाधानों की कोशिश करने के बाद मैंने एक के नीचे पाया और यह मेरे लिए काम कर गया
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.time लाइब्रेरी का उपयोग 8+ कर सकते हैं (सलाह दी जाती है) । आईएसओ 8601 दिनांक लिखने का मानक तरीका निर्धारित करता है: YYYY-MM-DD
और java.time.Instant
इसका उपयोग करता है, इसलिए (इसके लिए UTC
):
import java.time.Instant;
int myYear = Integer.parseInt(Instant.now().toString().substring(0,4));
पुनश्च सिर्फ मामले में (और प्राप्त करने के लिए शॉर्ट में String
, नहीं int
) का उपयोग कर Calendar
दिखता है बेहतर और क्षेत्र-बारे में पता किया जा सकता है।
एक कैलेंडर को तुरंत करने की आवश्यकता के बिना आप इंटगर गणित का उपयोग करके पूरी बात कर सकते हैं:
return (System.currentTimeMillis()/1000/3600/24/365.25 +1970);
नए साल पर एक या दो घंटे के लिए बंद हो सकते हैं, लेकिन मुझे यह धारणा नहीं है कि यह एक मुद्दा है?
मैं अपनी लाइब्रेरी में दिनों / महीने / वर्ष की इन्टस के साथ काम करने के लिए विशेष कार्यों का उपयोग करता हूं -
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
है नहीं नहीं जावा 8. अपने तरीकों में से कुछ के रूप में है, तो बहिष्कृत पदावनत कर रहे हैं लेकिन नहीं पूरी क्लास। लेकिन आपको दोनों से बचना चाहिएjava.util.Date
औरjava.util.Calendar
चूंकि वे कुख्यात परेशान, भ्रमित और दोषपूर्ण हैं। इसके बजाय java.time (जावा 8 में) या जोडा-टाइम का उपयोग करें ।