2009-12-09 8 views
25

मैं इसे बदलने के लिए क्या उपयोग कर सकता हूं, new Date(2009, 12, 9)?java.util.Date क्लास के पैरामीटरयुक्त कन्स्ट्रक्टर बहिष्कृत हैं। विकल्प क्या है?

आपकी मदद के लिए धन्यवाद।

+10

और अच्छे कारण के लिए, यदि आप 12 दिसंबर, 200 9 को चाहते हैं, तो आपको 'नई तिथि (109, 11, 9)' की आवश्यकता है। – Yishai

+3

@Yishai: मैं विवाद करता हूं कि कारण "अच्छे" हैं। –

+2

@Yishai: यह सहायक से अधिक मनमाने ढंग से obfuscation लगता है। – Sukasa

उत्तर

26

आदर्श रूप से, Joda Time का उपयोग करें। यह अंतर्निहित एक असीमित श्रेष्ठ एपीआई है। इसके बाद आप अपनी सटीक आवश्यकताओं के आधार पर LocalDateTime और DateTime के बीच चयन करना चाहते हैं (यह एक जटिल क्षेत्र है - मैं एक वाक्य या दो में सारांशित करने की कोशिश नहीं कर रहा हूं, लेकिन docs एक अच्छी नौकरी करें)।

यदि आवश्यक हो, तो java.util.Calendar का उपयोग करें और इसे Date पर बदलने के लिए जब आपको आवश्यकता हो।

+2

जोडा समय के लिए +1, यह दिनांक और कैलेंडर की तुलना में एक सपना है। –

+0

यह बहुत अच्छा हो सकता था, लेकिन मैं gxt (google web टूलकिट और ext js) का उपयोग कर रहा हूं, इसलिए मुझे लगता है कि मुझे इस एपीआई के साथ डेट ऑब्जेक्ट का उपयोग करना होगा। – Tim

+3

@ टिम: प्रश्न में गैर-मानक वातावरण का उल्लेख करने के लिए यह हमेशा * लायक है ... –

15

यदि आप Javadoc पर देखते हैं तो यह आपको Calendar का उपयोग करने की ओर इंगित करता है।

JDK संस्करण 1.1 के रूप में, Calendar.set (वर्ष + 1900, महीने, तारीख, घंटे, मिनट) या ग्रेगोरी कैलेंडर (वर्ष + 1900, माह, तिथि, बजे, मिनट) द्वारा बदल दिया।

आप Date निर्माता को देखें, तो पैरामीटर आप क्यों यह पदावनत किया गया था देखेंगे:

पैरामीटर:

year - the year minus 1900. 
month - the month between 0-11. 
date - the day of the month between 1-31. 
hrs - the hours between 0-23. 
min - the minutes between 0-59. 

year आप क्या उम्मीद नहीं है और न ही है month

तारीख आपने उल्लेख किया है आप की तरह Date कॉल करने की आवश्यकता का प्रतिनिधित्व करने के लिए इस (अनुशंसित नहीं)

new Date(2009-1900, 12-1, 9) 

Calendar का उपयोग कर वैकल्पिक

Calendar cal = Calendar.getInstance(); 
cal.set(2009, 11, 9); //year is as expected, month is zero based, date is as expected 
Date dt = cal.getTime(); 
+2

कैलेंडर का महीना अभी भी शून्य आधारित है। – BalusC

+0

असल में, महीना वह है जो मैं उम्मीद करता हूं। यह तारीख है कि मुझे पागल ड्राइव। जावा में सब कुछ शून्य आधारित है, तारीख को छोड़कर! – David

+0

@ ब्लॉससी: तो यह है। कोई आश्चर्य नहीं कि लोग इस खराब कैलेंडर एपीआई के बजाय जोडा डेट टाइम का उपयोग करना पसंद करते हैं। – pjp

8
है

तुम भी SimpleDateFormat वस्तु का उपयोग कर सकते हैं:

import java.util.Date; 
import java.text.SimpleDateFormat; 
import java.text.ParseException; 


public class DateTest { 
    public static void main(String [] args) throws ParseException { 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy, MM, dd"); 
     Date date = sdf.parse("2009, 12, 9"); 
     System.out.println(date); 
    } 
} 
+2

बस सावधान रहें कि 'SimpleDateFormat' को' स्थिर 'उदाहरण न दें क्योंकि यह थ्रेड सुरक्षित नहीं है। Http://www.ibm.com/developerworks/java/library/j-jtp09263.html – pjp

+0

देखें: -o मुझे नहीं पता था कि यह थ्रेड सुरक्षित नहीं था। सौभाग्य से मैंने इसका इस्तेमाल ज्यादातर बार किया है (हालांकि कक्षा सदस्य के रूप में घोषित किया गया) एक थ्रेड सुरक्षित संदर्भ में था :) – OscarRyz

2

दुर्भाग्य से जावा में तारीख समर्थन पूरी तरह से भयानक है। आधिकारिक तौर पर, आपको शायद कैलेंडर के साथ ऐसा करना होगा, लेकिन मेरी राय में यह आवश्यक नहीं होना चाहिए। दूसरों की तरह उल्लेख किया गया है, जोडा समय बहुत बेहतर है, लेकिन रेल पर रुबी में तिथियों के रूप में उपयोग करने में काफी आसान नहीं है।

मुझे किसी भी जावा पैकेज से अवगत नहीं है जो आपको काफी मात्रा में डेट समर्थन देता है (जोडा थोड़ी कम गिरती है, लेकिन करीब आती है), लेकिन ग्रोवी में, टाइमकैरिटी का उपयोग करके आपको रेल की तरह डेट रूट पर बहुत रूबी मिलती है । (0 जनवरी)

25

Calendar !

Calendar cal = Calendar.getInstance(); 
cal.set(2009, Calendar.DECEMBER, 12); 

सूचना है कि मैं दिसंबर के लिए 12 डाल नहीं लगा कि यह वास्तव में 11 है, क्योंकि।

उसके बाद, आप जोड़ सकते हैं या सेकंड, मिनट, घंटे, दिन, महीने या साल आसानी से निकाल सकते हैं:

cal.add(Calendar.HOUR, 2); 
cal.add(Calendar.MONTH, -5); 

और अंत में, आप एक तिथि चाहते हैं:

cal.getTime(); 
+1

आपके "add" उदाहरण गलत पैरामीटर ऑर्डर का उपयोग कर रहे हैं, यह cal.add (कैलेंडर.HOUR, 2) होना चाहिए। –

+1

ध्यान दें कि इस समाधान के साथ, घंटे, मिनट, सेकंड (और अंश) उनके वर्तमान मूल्य पर सेट हैं। यह वास्तव में साफ नहीं है। – tos

4

टिम, आपकी टिप्पणियों में आपने उल्लेख किया है कि आप इसे एक GXT संदर्भ में कर रहे हैं - यानी जीडब्ल्यूटी क्लाइंट कोड में। जीडब्ल्यूटी ग्रेगोरियन कैलेंडर का समर्थन नहीं करता है और आप संभवत: जीडब्ल्यूटीओएमपीएलर के माध्यम से जोडाटाइम डालने में सक्षम नहीं होंगे (आप सक्षम हो सकते हैं, लेकिन आप वास्तव में करना चाहते हैं)।

मुझे लगता है कि यदि आप जीडब्ल्यूटी में कैलेंडर परिचालन करना चाहते हैं तो आपको वास्तव में जेएनएसआई का उपयोग करने के विकल्प के साथ छोड़ दिया गया है। जावास्क्रिप्ट में दिनांक वर्ग देखें।

संबंधित मुद्दे