महीने की शुरुआत के लिए डेटटाइम सेट करें


97

मैं सी # में महीने के पहले को डेटटाइम कैसे सेट कर सकता हूं?


चालू माह की शुरुआत?
फिल गण

1
तो इसके बारे में क्या करना है, .. हर महीने की तारीख 1..does से शुरू होती है, वह महीने की शुरुआत में दिन जानना चाहता है
Shekhar_Pro

यदि हम जनवरी में हैं, तो इसे 01-जनवरी -2015 और फरवरी में दिखाया जाना चाहिए, फिर 01-फरवरी -2011
सीखना

आप गौर कर सकते हैं इस
V4Vendetta

जवाबों:


204
var now = DateTime.Now;
var startOfMonth = new DateTime(now.Year,now.Month,1);

62
एक टिप: हमेशा DateTime.Nowएक वैरिएबल में डालें और उपयोग करें कि यदि आप बार-बार मान का उपयोग करने जा रहे हैं। आधी रात के आसपास इस कोड को निष्पादित करने की स्थिति में एक त्रुटि की एक छोटी संभावना है; DateTime.Nowमध्यरात्रि के प्रत्येक पक्ष में दो कॉल संभवतया विषम प्रभाव पैदा कर सकते हैं।
फ्रेड्रिक मोर्क

अच्छी बात। मुझे लगता है कि नए साल की पूर्व संध्या पर मध्यरात्रि वह समय है जो संभावित रूप से एक समस्या पैदा करेगा।
निक जोन्स

1
सिर्फ नए साल का नहीं। किसी भी महीने के आखिरी दिन आधी रात को यह समस्या होगी। किसी भी मामले में, यह केवल एक समस्या होगी अगर इसे महीने के अंत में आधी रात के उस बहुत नैनोसेकंड पर निष्पादित किया जाए। लेकिन जब से आपने अपना कोड ठीक किया है, अब सब अच्छा है।
डग एस

1
आप "दिनांक समय" के बजाय "var" का उपयोग क्यों कर रहे हैं?
markthewizard1234

4
@ markthewizard1234 मुख्य रूप से क्योंकि C # प्रोग्रामर आलसी हैं। इसलिए हम केवल जब भी संभव हो var का उपयोग करते हैं क्योंकि यह केवल तीन वर्ण है। अन्य कारण हैं लेकिन मुझे लगता है कि ज्यादातर लोगों के लिए ऐसा करने का यह मुख्य कारण है।
टिम पोल्हमन

41

कुछ इस तरह काम करेगा

DateTime firstDay = DateTime.Today.AddDays(1 - DateTime.Today.Day);

4
जैसा कि फ्रेड्रिक मोर्क ने निक जोन्स के जवाब पर टिप्पणी की थी, जब आप इसे कई बार इस्तेमाल कर रहे होते हैं, तो एक बार में महीने के आखिरी दिन आधी रात के आसपास कोई समस्या न हो, इसके लिए डेटाइम को स्टोर करना सबसे अच्छा है। इसलिए: आज दिनांक = तिथि समय। डेटटाइम फर्स्टडे = आज।आडडे (1-today.Day);
डग एस

9
public static DateTime FirstDayOfMonth(this DateTime current)
{
    return current.AddDays(1 - current.Day);
}

1
यह बेहतर है क्योंकि यह समय क्षेत्र रखता है।
रोजी कासिम

8

पार्टी के लिए थोड़ा देर से लेकिन यहाँ एक विस्तार विधि है जो मेरे लिए चाल चली

public static class DateTimeExtensions
{
  public static DateTime FirstDayOfMonth(this DateTime dt)
  {
    return new DateTime(dt.Year, dt.Month, 1);
  }
}

1
इसके साथ समस्या यह है कि यह मूल समयक्षेत्र नहीं रखता है।
माइक कोल

2
DateTime now = DateTime.Now;
DateTime date = new DateTime(now.Year, now.Month, 1);

आप DateTime.Now के बजाय किसी और चीज का उपयोग कर सकते हैं


2

मैंने सिर्फ निक उत्तर और एसओ पर अन्य के आधार पर कुछ विस्तार विधियां बनाई हैं

public static class DateTimeExtensions 
{
    /// <summary>
    /// get the datetime of the start of the week
    /// </summary>
    /// <param name="dt"></param>
    /// <param name="startOfWeek"></param>
    /// <returns></returns>
    /// <example>
    /// DateTime dt = DateTime.Now.StartOfWeek(DayOfWeek.Monday);
    /// DateTime dt = DateTime.Now.StartOfWeek(DayOfWeek.Sunday);
    /// </example>
    /// <remarks>http://stackoverflow.com/a/38064/428061</remarks>
    public static System.DateTime StartOfWeek(this System.DateTime dt, DayOfWeek startOfWeek)
    {
        var diff = dt.DayOfWeek - startOfWeek;
        if (diff < 0)
            diff += 7;

        return dt.AddDays(-1 * diff).Date;
    }

    /// <summary>
    /// get the datetime of the start of the month
    /// </summary>
    /// <param name="dt"></param>
    /// <returns></returns>
    /// <remarks>http://stackoverflow.com/a/5002582/428061</remarks>
    public static System.DateTime StartOfMonth(this System.DateTime dt) =>
        new System.DateTime(dt.Year, dt.Month, 1);


    /// <summary>
    /// get datetime of the start of the year
    /// </summary>
    /// <param name="dt"></param>
    /// <returns></returns>
    public static System.DateTime StartOfYear(this System.DateTime dt) => 
         new System.DateTime(dt.Year, 1, 1);

}

0

यह कुशल और सही होना चाहिए:

DateTime RoundDateTimeToMonth(DateTime time)
{
    long ticks = time.Ticks;
    return new DateTime((ticks / TimeSpan.TicksPerDay - time.Day + 1) * TimeSpan.TicksPerDay, time.Kind);
}

यहां ticks / TimeSpan.TicksPerDayदिए गए पूरे दिनों की गिनती दी गई है timeऔर - time.Day + 1इस गिनती को महीने की शुरुआत में रीसेट करता है।



-2
var currentDate = DateTime.UtcNow.Date;
var startDateTimeOfCurrentMonth = currentDate.AddDays(-(currentDate.Day - 1));

3
यह फूबो के जवाब की काफी नकल है, आपको नहीं लगता?
थॉमस अय्यूब

2
यद्यपि यह कोड समस्या को हल कर सकता है, यह हमेशा यह समझाते हुए स्पष्टीकरण जोड़ने के लिए प्रोत्साहित किया जाता है कि यह क्यों / कैसे काम करता है।
बीडीएल

@ThomasAyoub - नहीं, यह फ़ुबो के जवाब की पर्याप्त नकल नहीं है क्योंकि इसमें समय पोर्ट नहीं होगा।
जय शाह

@ बीडीएल - मुझे लगता है कि यह समझना बहुत आसान है जिसे स्पष्टीकरण की आवश्यकता नहीं है। लेकिन FYI करें, मैंने वर्तमान Utc Date ले लिया है और फिर इसे महीने की शुरुआत की तारीख यानी 1 (नहीं 0 और इसलिए मैंने 1 घटाया है) प्राप्त करने के लिए इसमें से घटाया (वर्तमान तिथि - 1)। और हाँ, यह निश्चित रूप से समस्या को हल करेगा।
जय शाह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.