पंक्तियों में दिनांक समय सप्ताह की गणना करें

मैं वर्तमान में एएसपी.Net सी # में एक छोटा कैलेंडर लिख रहा हूं। वर्तमान में हफ्तों की पंक्तियों का उत्पादन करने के लिए मैं लूप के लिए निम्न कार्य करता हूं:

var iWeeks = 6;
for (int w = 0; w < iWeeks; w++) {

यह ठीक काम करता है, हालांकि, कुछ महीने में केवल 5 सप्ताह होंगे और कुछ दुर्लभ मामलों में, 4।

मैं किसी विशेष महीने के लिए आवश्यक पंक्तियों की संख्या की गणना कैसे कर सकता हूं?

यह एक उदाहरण है जो मैं बना रहा हूं:

यहां छवि विवरण दर्ज करें

जैसा कि आप उपरोक्त महीने के लिए देख सकते हैं, हालांकि, केवल 5 पंक्तियां आवश्यक हैं। इस महीने (अगस्त 2008) जो शनिवार को शुरू हुआ और 6 वें सप्ताह/पंक्ति पर सोमवार को समाप्त होता है।

Google पर मिली छवि


यह एक उदाहरण है जो मैं बना रहा हूं:

यहां छवि विवरण दर्ज करें

जैसा कि आप उपरोक्त महीने के लिए देख सकते हैं, हालांकि, केवल 5 पंक्तियां आवश्यक हैं। इस महीने (अगस्त 2008) जो शनिवार को शुरू हुआ और 6 वें सप्ताह/पंक्ति पर सोमवार को समाप्त होता है।

Google पर मिली छवि

0
ro fr bn

9 उत्तर

सबसे पहले यह पता लगाएं कि महीने का पहला दिन किस दिन का दिन है। बस पहले दिन के साथ एक समय-समय पर नया, हमेशा 1, और साल और महीने में प्रश्न पूछें, इसमें सप्ताह की संपत्ति का एक दिन है।

फिर यहां से, आप महीने में दिनों की संख्या का उपयोग कर सकते हैं, DateTime.DaysInMonth , यह निर्धारित करने के लिए कि आप सात से विभाजित करते हैं और फिर 1 से दिन की संख्या जोड़ें दिन गिरता है उदाहरण के लिए,

public static int RowsForMonth(int month, int year)
{
    DateTime first = new DateTime(year, month, 1);

    //number of days pushed beyond monday this one sits
    int offset = ((int)first.DayOfWeek) - 1;

    int actualdays = DateTime.DaysInMonth(month, year) +  offset;

    decimal rows = (actualdays/7);
    if ((rows - ((int)rows)) > .1)
    {
        rows++;
    }
    return rows;
}
0
जोड़ा

किस सप्ताह की जांच करने के बारे में पहला और आखिरी दिन होगा?

0
जोड़ा

खैर, यह उस संस्कृति पर निर्भर करता है जिसका आप उपयोग कर रहे हैं, लेकिन मान लीजिए कि आप थ्रेड.कुरेंट थ्रेड.कुरेंटकल्चर का उपयोग कर सकते हैं, फिर कोड का आज का सप्ताह प्राप्त होगा:

Culture culture = Thread.CurrentThread.CurrentCulture;
Calendar cal = culture.Calendar;
Int32 week = cal.GetWeekOfYear(DateTime.Today,
    culture.DateTimeFormat.CalendarWeekRule,
    culture.DateTimeFormat.FirstDayOfWeek);
0
जोड़ा

समस्या महीने में दिनों की संख्या नहीं है, यह कितनी हफ्तों तक फैलती है।

गैर-लीप वर्ष में फरवरी में 28 दिन होंगे, और यदि महीने का पहला दिन सोमवार है, तो फरवरी निश्चित रूप से 4 सप्ताह की संख्या में फैलेगा।

हालांकि, अगर महीने का पहला दिन एक मंगलवार, या सप्ताह के किसी अन्य दिन है, तो फरवरी 5 सप्ताह की संख्या में फैलेगा।

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

तो इस नंबर को प्राप्त करने का सही तरीका महीने के पहले और अंतिम दिनों की सप्ताह संख्या को ढूंढना है।


Edit #1: Here's how to calculate the number of weeks a given month spans: Edit #2: Fixed bugs in code

public static Int32 GetWeekForDateCurrentCulture(DateTime dt)
{
    CultureInfo culture = Thread.CurrentThread.CurrentCulture;
    Calendar cal = culture.Calendar;
    return cal.GetWeekOfYear(dt,
        culture.DateTimeFormat.CalendarWeekRule,
        culture.DateTimeFormat.FirstDayOfWeek);
}

public static Int32 GetWeekSpanCountForMonth(DateTime dt)
{
    DateTime firstDayInMonth = new DateTime(dt.Year, dt.Month, 1);
    DateTime lastDayInMonth = firstDayInMonth.AddMonths(1).AddDays(-1);
    return
        GetWeekForDateCurrentCulture(lastDayInMonth)
        - GetWeekForDateCurrentCulture(firstDayInMonth)
        + 1;
}
0
जोड़ा

जूलियन/ग्रेगोरियन कैलेंडर में महीनों में हर साल समान संख्या होती है, फरवरी को छोड़कर, जो वर्ष की उछाल के आधार पर 28 या 2 9 दिन हो सकती है। आप http://en.wikipedia.org/wiki/ पर विवरण अनुभाग में दिनों की संख्या पा सकते हैं Gregorian_calendar

जैसा कि @ डार्कडॉग ने बताया है कि आपके पास डेटटाइम है। डेज़ इनमंथ। बस यह करो:

var days = DateTime.DaysInMonth(year, month) + 
           WhatDayOfWeekTheMonthStarts(year, month);    
int rows = (days/7);  
if (0 < days % 7)  
{  
    ++rows;
}  

इस तथ्य को ध्यान में रखें कि वैश्वीकरण/स्थानीयकरण उद्देश्यों के लिए, दुनिया के कुछ हिस्सों वर्ष के संगठन के विभिन्न कैलेंडर/विधियों का उपयोग करते हैं।

0
जोड़ा

यहां वह तरीका है जो यह करता है:

public int GetWeekRows(int year, int month)
{
    DateTime firstDayOfMonth = new DateTime(year, month, 1);
    DateTime lastDayOfMonth = new DateTime(year, month, 1).AddMonths(1).AddDays(-1);
    System.Globalization.Calendar calendar = System.Threading.Thread.CurrentThread.CurrentCulture.Calendar;
    int lastWeek = calendar.GetWeekOfYear(lastDayOfMonth, System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
    int firstWeek = calendar.GetWeekOfYear(firstDayOfMonth, System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
    return lastWeek - firstWeek + 1;
}

आप System.Globalization.CalendarWeekRule.FirstFourDayWeek भाग को संशोधित करके कैलेंडर सप्ताह नियम को कस्टमाइज़ कर सकते हैं। मुझे उम्मीद है कि कोड आत्म व्याख्यात्मक है।

0
जोड़ा

इसे इस्तेमाल करे,

DateTime.DaysInMonth
0
जोड़ा

आप डेटटाइम का उपयोग करके एक महीने के दिन प्राप्त कर सकते हैं। डेज़ इनमोन (int जोयर, int जोमंथ);

0
जोड़ा

कैलेंडर.GetWeekOfYear । यह चाल करना चाहिए।

इसमें कोई समस्या है, यह आईएसओ 8601 द्वारा 4 दिन के नियम का पालन नहीं करता है, लेकिन अन्यथा यह साफ है।

0
जोड़ा