दिनांक बनाम दिनांक समय


110

मैं एक ऐसे कार्यक्रम पर काम कर रहा हूं जिसके लिए किसी इवेंट की तारीख की आवश्यकता होती है।

मैं एक Dateनहीं, एक की तलाश में हूं DateTime

क्या कोई डेटापाइप है जो सिर्फ तारीख को लौटाता है?

जवाबों:


131

नहीं वहाँ नहीं है। DateTimeउस समय के कुछ बिंदुओं का प्रतिनिधित्व करता है जो एक तिथि और एक समय से बना होता है। हालाँकि, आप Dateसंपत्ति के माध्यम से दिनांक भाग को पुनः प्राप्त कर सकते हैं (जो DateTimeसमय निर्धारित के साथ एक और है 00:00:00)।

और आप के माध्यम से व्यक्तिगत तिथि गुण प्राप्त कर सकते हैं Day, Monthऔर Year


23

मैंने समय के लिए एक सरल दिनांक संरचना बनाई है जब आपको समय भाग, टाइमज़ोन, स्थानीय बनाम utc, आदि के बारे में चिंता किए बिना एक सरल तिथि की आवश्यकता होती है।

Date today = Date.Today;
Date yesterday = Date.Today.AddDays(-1);
Date independenceDay = Date.Parse("2013-07-04");

independenceDay.ToLongString();    // "Thursday, July 4, 2013"
independenceDay.ToShortString();   // "7/4/2013"
independenceDay.ToString();        // "7/4/2013"
independenceDay.ToString("s");     // "2013-07-04"
int july = independenceDay.Month;  // 7

https://github.com/claycephus/csharp-date


2
धन्यवाद! यह उपयोगी है।
गरफड़ाज़

16

दुर्भाग्य से, .Net BCL में नहीं। तिथियों को आम तौर पर मध्यरात्रि को निर्धारित समय के साथ डेटटाइम ऑब्जेक्ट के रूप में दर्शाया जाता है।

जैसा कि आप अनुमान लगा सकते हैं, इसका मतलब है कि आपके पास सभी परिचर टाइमज़ोन मुद्दे हैं, भले ही आप जिस दिनांक ऑब्जेक्ट के लिए चाहते हैं, वह पूरी तरह से nozone हैंडलिंग है।


1
यदि आप दिनांक के रूप में एक दिनांक समय मान का उपयोग कर रहे हैं, तो UTC को तरह सेट करें। समय क्षेत्र समायोजन से निपटने के लिए नहीं। दिनांक समय तिथि = DateTime.SpecifyKind (DateTime.Today, DateTimeKind, Utc);
सनकैट २२

हां, मैं अनुभव से बोल सकता हूं कि dateकिसी भी चीज के लिए उपयोग करना एक बुरा विचार है जब तक कि आप 100% सुनिश्चित न हों कि आपका ऐप केवल एक समय क्षेत्र में काम करेगा। datetimeयदि आप अपने सर्वर के टाइमज़ोन को कभी भी परिवर्तित करते हैं, तो आप सभी चीज़ों को सहेजना चाहते हैं, जिसमें सबसे गंभीर रूप से, समय-समय पर बुरे सपने से बचने का आसान तरीका भी शामिल है। अगर आप कभी भी गलत समय-सीमा के संदर्भ में लिखना शुरू कर देते हैं, तो आप उसे नहीं Datetimeबचा dateसकते हैं, और इसे ठीक करने के लिए मुश्किल से मुश्किल हो जाएगा date
केल्सी हन्नान

2
@KelseyHannan जब तक आप निश्चित रूप से "जन्म तिथि", या "खरीद की तारीख" जैसी चीजों से निपट रहे हैं, जहां आप स्पष्ट रूप से सिर्फ इसलिए नहीं चाहते कि रहस्यमय तरीके से दिन बदल रहे हैं क्योंकि आप देशों में चले गए हैं। जैसे कहना है, न्यूजीलैंड में आयरिश बंधक अनुप्रयोगों को एक गैर-यादृच्छिक उदाहरण के रूप में संसाधित करना।
रोजर विलकॉक्स

9

एक आवरण वर्ग बनाएँ। कुछ इस तरह:

public class Date:IEquatable<Date>,IEquatable<DateTime>
    {
        public Date(DateTime date)
        {
            value = date.Date;
        }

        public bool Equals(Date other)
        {
            return other != null && value.Equals(other.value);
        }

        public bool Equals(DateTime other)
        {
            return value.Equals(other);
        }

        public override string ToString()
        {
            return value.ToString();
        }
        public static implicit operator DateTime(Date date)
        {
            return date.value;
        }
        public static explicit operator Date(DateTime dateTime)
        {
            return new Date(dateTime);
        }

        private DateTime value;
    }

और जो भी valueआप चाहते हैं उसे उजागर करें ।


4
मेरा सुझाव था कि अपने निर्माता स्थापित करना चाहिए DateTime.Kind लिए DateTimeKind.Unspecifiedकि जब धारावाहिक यह परिवर्तित किए बिना deserialized हो जाता है तो (समय-क्षेत्रों में विभिन्न पर आधारित तिथि बदल सकते हैं)।
ओट्सोडा

1
@OffHeGoes DateTime.Kind को सेट करें DateTimeKind.Utc। इसे सेट न करेंDateTimeKind.Unspecified क्योंकि यह गारंटी देगा कि यह एक सम्मिलित समय क्षेत्र ऑफसेट के साथ क्रमबद्ध / deserialized हो जाता है! कैलेंडर ज़ोन समय क्षेत्र की परवाह किए बिना समान है, इसलिए सिस्टम को इसे समायोजित न करने दें।
सनकैट २२

5

दिनांक प्रकार VB.NET द्वारा उपयोग की जाने वाली DateTime प्रकार का केवल एक अन्य नाम है (जैसे int पूर्णांक हो जाता है)। इन दोनों प्रकारों में एक दिनांक गुण होता है जो आपको 00:00:00 तक निर्धारित समय भाग के साथ वस्तु लौटाता है।


1
सच। VB.NET दिनांक प्रकार के लिए MSDN दस्तावेज़ पृष्ठ कहता है: .NET फ्रेमवर्क में संबंधित प्रकार System.DateTime संरचना है।
miroxlav

4

DateTime के पास एक दिनांक गुण है जिसका उपयोग आप दिनांक भाग को अलग करने के लिए कर सकते हैं। ToString विधि भी केवल दिनांक हिस्सा प्रदर्शित जब समय भाग रिक्त है का एक अच्छा काम करता है।


3

DateTime ऑब्जेक्ट में एक गुण होता है जो मान के केवल दिनांक भाग को लौटाता है।

    public static void Main()
{
    System.DateTime _Now = DateAndTime.Now;
    Console.WriteLine("The Date and Time is " + _Now);
    //will return the date and time
    Console.WriteLine("The Date Only is " + _Now.Date);
    //will return only the date
    Console.Write("Press any key to continue . . . ");
    Console.ReadKey(true);
}

यह उत्तर गलत है। दिनांक DateTime0:00:00
सर्ज सगुन

3

कोई Dateडेटाटाइप नहीं है ।

हालाँकि आप DateTime.Dateकेवल दिनांक प्राप्त करने के लिए उपयोग कर सकते हैं ।

ईजी

DateTime date = DateTime.Now.Date;

दिनांक संरचना है, और ऑब्जेक्ट को दिनांक के रूप में घोषित किया जा सकता है।
कालेब एंडरसन

@KalebAnderson डिफ़ॉल्ट कार्यान्वयन .NET में नहीं, वहाँ नहीं है। अगर आप VB.net डेट के बारे में बात कर रहे हैं, तो वह अभी भी डेटाइम है।
निक एन।

DateTime.Now.Dateके रूप में ही है DateTime.Today। वहाँ एक है DateTime.UtcNowकि सार्वभौमिक समय (UTC) के रूप में की तारीख के समय मान देता है, लेकिन कोई यूटीसी बराबर विधि या आज के लिए संपत्ति है, DateTimeKind.UtcNow.Dateउपयुक्त अभिव्यक्ति है।
सनकैट २२

2

आप DateTime को वापस कर सकते हैं जहाँ समय भाग 00:00:00 है और इसे अनदेखा करें। तारीखों को टाइमस्टैम्प पूर्णांक के रूप में नियंत्रित किया जाता है, इसलिए यह तारीख को उस समय के साथ संयोजित करने के लिए समझ में आता है जो पूर्णांक में मौजूद है।


2

इसके लिए, आपको तारीख का उपयोग करने की आवश्यकता है, लेकिन समय के मूल्य को अनदेखा करें।

आमतौर पर एक तारीख के समय के साथ एक डेटटाइम होगा 00:00:00

DateTimeप्रकार एक है .Dateसंपत्ति जो रिटर्न DateTimeके ऊपर के रूप में समय भी मान सेट।



0

आप निम्न में से एक कोशिश कर सकते हैं:

DateTime.Now.ToLongDateString();
DateTime.Now.ToShortDateString();

लेकिन बीसीएल में कोई "दिनांक" प्रकार नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.