সপ্তাহের শুরুতে আমি কীভাবে ডেটটাইম পেতে পারি?


468

সপ্তাহে (রবিবার এবং সোমবার উভয়ই) সি # তে কেবলমাত্র বর্তমান সময়টি জেনে আমি কীভাবে শুরু করব?

কিছুটা এইরকম:

DateTime.Now.StartWeek(Monday);

উত্তর:


745

একটি এক্সটেনশন পদ্ধতি ব্যবহার করুন। তারা সবকিছুর উত্তর, আপনি জানেন! ;)

public static class DateTimeExtensions
{
    public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek)
    {
        int diff = (7 + (dt.DayOfWeek - startOfWeek)) % 7;
        return dt.AddDays(-1 * diff).Date;
    }
}

যা নিম্নলিখিত হিসাবে ব্যবহার করা যেতে পারে:

DateTime dt = DateTime.Now.StartOfWeek(DayOfWeek.Monday);
DateTime dt = DateTime.Now.StartOfWeek(DayOfWeek.Sunday);

15
আপনি নিম্নলিখিত হিসাবে এটি সহজ করতে পারেন: int diff = dayOfWeek - dt.DayOfWeek; return dt.AddDays(diff).Date;
ট্রয়

13
ট্রয়, প্রদত্ত তারিখটি রবিবার এবং সপ্তাহের শুরুতে সোমবার হলে আপনার কোড কাজ করে বলে আমি বিশ্বাস করি না। এটি (রবিবার + 6) এর পরিবর্তে (রবিবার + 1) ফিরে আসবে
অ্যারন হফম্যান

1
এই যদি কাজ না করে dtইউটিসি এবং ইতিমধ্যে সপ্তাহে যেমন শুরু হয় 2012-09-02 16:00:00Zযা Mon, 03 Sep 2012 00:00:00স্থানীয় সময়। সুতরাং এটি dtস্থানীয় সময় রূপান্তর বা কিছু স্মার্ট কিছু করতে হবে। ইনপুটটি ইউটিসি হলে ফলাফলটি ইউটিসি হিসাবে ফেরত দেওয়া দরকার।
সারি 1

1
@ সারি 1 DateTime.Parse("2012-09-02 16:00:00Z")স্থানীয় সময় সমতুল্যকে প্রদান করে এবং এই পদ্ধতিটি স্থানীয় সময় হিসাবে সঠিকভাবে একই সময়ে ফিরে আসে। আপনি যদি DateTime.Parse("2012-09-02 16:00:00Z").ToUniversalTime()ইউটিসি সময় স্পষ্টভাবে পাস করতে ব্যবহার করেন তবে এই পদ্ধতিটি ইউটিসির সময় হিসাবে 16 দিন আগে 16 দিন আগে সঠিকভাবে ফিরে আসে। আমি যেমন আশা করছিলাম ঠিক তেমন কাজ করছে।
রাউলিং

1
এটি আমার মাঝে মাঝে মাঝে একদিন বন্ধ হয়ে যায়। আমি সময় উপাদানটি একবার থেকে সরিয়ে ফেললে এটি আমার পক্ষে কাজ করে dt। আমি ব্যবহার করেছিint diff = dt.Date.DayOfWeek - startOfWeek;
ভিনসেন্ট সেলজলার

80

আমি যে দ্রুততম উপায়টি নিয়ে আসতে পারি তা হ'ল:

var sunday = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek);

আপনি যদি সপ্তাহের অন্য কোনও দিনটি আপনার শুরুর তারিখ হতে চান তবে আপনাকে যা করতে হবে তা হ'ল ডে-অফ-উইকের মানটি শেষ পর্যন্ত যুক্ত করতে হবে

var monday = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek + (int)DayOfWeek.Monday);

var tuesday = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek + (int)DayOfWeek.Tuesday); 

2
সবচেয়ে সহজ উত্তরগুলি সবচেয়ে ভাল, এটি একটি ভাল কাজ করেছে, তবে সংস্কৃতি নির্ভর করেছে
সারভেসার

7
লাতভিয়ার সপ্তাহে সোমবার শুরু হয় .. আসলে .. আমি সর্বদা ভাবছি যে রবিবার থেকে কীভাবে একটি সপ্তাহ শুরু হতে পারে .. আমার কাছে বিশ্রী মনে হয় ..;)
0xDEAD BEEF

এই সমাধান ভাল। এছাড়াও আপনি যে দিনটি শুরু করতে চান সেই ডয়অউফউইকে যোগ করে আপনি যে কোনও দিন সপ্তাহের শুরু করতে পারেন। var সানডে = ডেটটাইম.টোডে.এডডয়েস (- (অবধি) ডেটটাইম.টডা.ডয়অফ উইক); var সোমালি = তারিখটাইম। আজকের দিন.এডডয়েস (- (অন্তর্) তারিখটাইম। টোডে.ডয়অফউইক + (অন্তর্) ডেওফওইক.মন্ডি);
ললিগানস

7
এই যুক্ত কোডটি থ্রিজল দ্বারা বর্ণিত পরিস্থিতির জন্য কাজ করে না। আপনি যদি সপ্তাহের শুরুটি সোমবার হতে চান তবে রবিবার গণনাটি আপনাকে আগত সোমবার দেয়, আগেরটি নয়।
জিওভান্নি বি

4
হ্যাঁ .. রবিবারের জন্য, এটি পরবর্তী Modnay দেয় .. আগেরটি নয়: পি
অজয় আরাধ্য্যা

64

আরও কিছুটা ভার্বোজ এবং সংস্কৃতি সচেতন:

System.Globalization.CultureInfo ci = 
    System.Threading.Thread.CurrentThread.CurrentCulture;
DayOfWeek fdow = ci.DateTimeFormat.FirstDayOfWeek;
DayOfWeek today = DateTime.Now.DayOfWeek;
DateTime sow = DateTime.Now.AddDays(-(today - fdow)).Date;

4
এর সাথে একটি ত্রুটি পেয়েছে: আজ = রবিবার; fdow = সোমবার; (আজ - fdow) == -1; ডেটটাইম.নো.এডডয়েস (- (- 1))। তারিখ == তারিখটাইম.নো.এডডয়েস (+1)। তারিখ; 01-02-2010! = 25-01-2010 !!
বেলেক্সান্দ্রে

3
আপনি যদি রবিবার এটি চেষ্টা করে থাকেন তবে এটি মূলত এন জিবি-র জন্য অ্যাডডেস (0 - 1) করছে। সুতরাং এটির জন্য @ সারকাস্টিকের যদি বিবৃতি দরকার
ক্রিস এস

3
আপনি CultureInfo.CurrentCultureএটিকে থ্রেড থেকে টানানোর পরিবর্তে বর্তমান সংস্কৃতিটি ব্যবহার করে পেতে পারেন । এটি অ্যাক্সেস করার এক অদ্ভুত উপায় বলে মনে হচ্ছে।
হ্যাঙ্ক

7
আরেকটি সমস্যা: Nowসম্পত্তিটি দু'বার কল করা বিপজ্জনক । যদি বর্তমান সময়টি দুটি কলের মধ্যে 24:00 (বা 12:00 মধ্যরাত) কেটে যায় তবে তারিখটি পরিবর্তন হয়ে যাবে।
জেপ্পে স্টিগ নীলসন

1
এই উত্তরটি আসলে যা তা করে তা হ'ল: "বর্তমানের অভ্যন্তরীণ। নেট সপ্তাহে (রবিবার থেকে শুরু হয়ে শনিবার শেষ হবে, ডেওফিউক গণনার সংখ্যা অনুযায়ী), নেট সপ্তাহের দিনটি আবিষ্কার করুন যা সপ্তাহের প্রথমটি হয় বর্তমান সংস্কৃতিতে "। এটি সম্ভবত আপনি চান না।
ম্যাথিউ রেন্ডা

36

ফ্লুয়েন্ট ডেটটাইম ব্যবহার :

var monday = DateTime.Now.Previous(DayOfWeek.Monday);
var sunday = DateTime.Now.Previous(DayOfWeek.Sunday);

29
আমি কেবল এর জন্য নির্ভরতা নিতে ঘৃণা করব। "আপনার নির্ভরতাগুলি জেনে রাখুন এবং তাদের হত্যা করুন" মনে পড়বে। :)
এস্তেবান আরায়ায়

7
কেউ কীভাবে লক্ষ্য করেছেন যে "সাবলীল" কীভাবে কাজ করছে? কোডটি একবার দেখুন। লুপ করার সময় এটি একটি করণীয় ব্যবহার করছে। এটিকে নাম বলতে চাই না তবে আমি যদি সিদ্ধান্ত নিই তবে এটি সুন্দর হবে না। public static DateTime Previous(this DateTime start, DayOfWeek day) { do { start = start.PreviousDay(); } while (start.DayOfWeek != day); return start; }
nsimeonov

10
@nsimeonov এটি মুক্ত উত্স। দয়া করে পাথর নিক্ষেপ করার পরিবর্তে আরও ভাল বাস্তবায়ন প্রদান করতে দ্বিধা বোধ করুন।
সাইমন

12
হ্যাঁ, পৃথিবীর প্রতিটি ওপেন সোর্স সফ্টওয়্যারটিতে প্রতিটি একক বাগ ঠিক করার জন্য আমি পৃথিবীতে সব সময় ছিল ...
nsimeonov

4
আমাকে মন্তব্য করতে হয়েছিল কারণ "ডু ... যখন" লুপ ব্যবহার করার বিষয়ে অভিযোগ থেকে আমি প্রচুর হাসি পেয়েছি! অত্যধিক হাসিখুশি! আমি এর আগে লুপ সম্পর্কে আর কোনও প্রোগ্রামার কাঁপতে শুনিনি। এই কোডের চেহারাটি দেখতে / পছন্দ করতে চাইবেন যখন / তিনি কখনই বুঝতে পারেন যে তার কোডটি আসলে কী সংকলন করে।
জোশ স্টোডোলা

22

কুরুচিপূর্ণ তবে এটি কমপক্ষে সঠিক তারিখগুলি দেয়

সিস্টেম দ্বারা নির্ধারিত সপ্তাহের শুরু সহ:

    public static DateTime FirstDateInWeek(this DateTime dt)
    {
        while (dt.DayOfWeek != System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek)
            dt = dt.AddDays(-1);
        return dt;
    }

ছাড়া:

    public static DateTime FirstDateInWeek(this DateTime dt, DayOfWeek weekStartDay)
    {
        while (dt.DayOfWeek != weekStartDay)
            dt = dt.AddDays(-1);
        return dt;
    }

3
এটি এর সরলতা এবং পাঠযোগ্যতার জন্য সত্যই আরও বেশি ভোটের দাবিদার।
অধ্যাপক

এই সংস্থানটিও সহায়তা করেছে: মার্কব.উক /… (আপনি যদি এক সপ্তাহ বা মাসের প্রথম / শেষ দিন পেতে চান)।
ফ্র্যাঞ্জহুবার 23

13

আসুন সংস্কৃতি-নিরাপদ উত্তর এবং এক্সটেনশন পদ্ধতির উত্তর একত্রিত করুন:

public static class DateTimeExtensions
{
    public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek)
    {
        System.Globalization.CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentCulture;
        DayOfWeek fdow = ci.DateTimeFormat.FirstDayOfWeek;
        return DateTime.Today.AddDays(-(DateTime.Today.DayOfWeek- fdow));
    }
}

12
আপনার ফাংশনের মধ্যেই কোনও ডিটি বা স্টার্টঅফ উইক ব্যবহার করা হয়নি, আমার ধারণা,
ডেটটাইমের

2
প্রশ্নের প্রসঙ্গটি ডেটটাইম বন্ধ হিসাবে একইভাবে ব্যবহার করতে একটি অতিরিক্ত সম্পত্তি চায়। আজ বা .এখন। আমি সম্মত হলাম এটি বিশ্রী, তবে এটিই যা চাওয়া হয়েছিল।
জোয়েল কোহর্ন

7
আমি জানি এটি একটি পুরানো উত্তর, তবে এটি এতগুলি স্তরে ভুল; পদ্ধতির যুক্তিগুলি সম্পূর্ণ উপেক্ষা করার পাশাপাশি, গণিতটি অনেক ক্ষেত্রে ভবিষ্যতের তারিখটি বেছে নেবে । এটি dtপরিবর্তে ব্যবহার করার জন্য DateTime.Today, (offset + 7) % 7একটি নেতিবাচক অফসেট নিশ্চিত করার জন্য গণিতকে আবৃত করার জন্য, একটি একক-পরামিতি পদ্ধতি ওভারলোড যা বর্তমান সংস্কৃতিটিকে তর্ক FirstDayOfWeekহিসাবে পাস করে startOfWeekএবং সম্ভবত (অনুমানের উপর নির্ভর করে) একটি জোর করে বলার জন্য এটি লেখা উচিত ছিল শূন্য একটি 7 দিনের অফসেটে অফসেট, যাতে ইতিমধ্যে মঙ্গলবার যদি "গত মঙ্গলবার" আজ ফিরে না আসে।
অ্যারোনআউট

10

এটি আপনাকে পূর্ববর্তী রবিবার দেবে (আমার মনে হয়):

DateTime t = DateTime.Now;
t -= new TimeSpan ((int) t.DayOfWeek, 0, 0, 0);

9

এটি হ্যাকের সামান্য কিছু হতে পারে তবে আপনি .ডাইফউইক সম্পত্তিটি একটি ইনটকে ফেলে দিতে পারেন (এটি একটি এনাম এবং যেহেতু এটির অন্তর্নিহিত ডেটা টাইপটি এটিতে পূর্বনির্ধারিতভাবে পরিবর্তিত হয়েছিল) এবং সপ্তাহের আগের শুরুটি নির্ধারণ করতে এটি ব্যবহার করুন ।

এটি দিবস অফ উইক এনামে রবিবার শুরু হওয়া সপ্তাহে প্রদর্শিত হবে, সুতরাং আমরা যদি এই মানটি থেকে 1 টি বিয়োগ করি তবে বর্তমান তারিখের আগে সোমবার কত দিনের সমান হবে। আমাদের রবিবার (0) এর সমান 7 টিরও মানচিত্রের প্রয়োজন তাই দেওয়া 1 - 7 = -6 রবিবারটি পূর্ববর্তী সোমবারে মানচিত্র করবে: -

DateTime now = DateTime.Now;
int dayOfWeek = (int)now.DayOfWeek;
dayOfWeek = dayOfWeek == 0 ? 7 : dayOfWeek;
DateTime startOfWeek = now.AddDays(1 - (int)now.DayOfWeek);

আগের রবিবারের কোডটি সহজ কারণ আমাদের এই সমন্বয় করতে হবে না: -

DateTime now = DateTime.Now;
int dayOfWeek = (int)now.DayOfWeek;
DateTime startOfWeek = now.AddDays(-(int)now.DayOfWeek);

9

সোমবারের জন্য

DateTime startAtMonday = DateTime.Now.AddDays(DayOfWeek.Monday - DateTime.Now.DayOfWeek);

রবিবারের জন্য

DateTime startAtSunday = DateTime.Now.AddDays(DayOfWeek.Sunday- DateTime.Now.DayOfWeek);

1
আমার একটি আলাদা অ্যাপ্লিকেশন প্রয়োজন ছিল, তবে আমি আমাকে চালিয়ে যেতে এটি ব্যবহার করেছিলাম। আমি এটি পছন্দ করি কারণ এটি কোনও castালাই ছাড়াই সবচেয়ে সহজ - অপারেশনগুলি একই / যথাযথ প্রকারে রেখে।
qxotk

1
দিনটি রবিবার হলে এটি কাজ করে না। এটি চলতি সপ্তাহের শুরু নয়, নিম্নলিখিত সোমবার দেয়।
অনুদান জে

এছাড়াও আপনি রবিবার বা সোমবার অনুলিপি করেছেন। আমার 2 টি উত্তর আছে একটি আপনি সোমবারের জন্য চান এবং 2on আপনি যদি রবিবার চান ..... আমি কেবল এটি পরীক্ষা করেছি এবং এটি আমার পক্ষে ভাল কাজ করে। DateTime.Now.DayOfWeek; রবিবার এবং রেজাল্ট ডেটটাইম.নো.এডডয়েস (ডেওফিউক.সুনডে - ডেটটাইম.নো.ডাইঅফওইক); {10/11/2019 4:14:55 μμ} তারিখ: {10/11/2019 12:00:00 πμ} দিন: 10 DayOfWeek: রবিবার দিন অফিস: 314 ঘন্টা: 16 ধরণ: স্থানীয় মিলিসেকেন্ড: 172 মিনিট: 14 মাস : 11 সেকেন্ড: 55 টিক্স: 637089992951723516 টাইম অফফাই: {16: 14: 55.1723516} বছর: 2019
জর্জ স্ট্যাভ্রো

@ গ্রান্টজে আপনি কোন লাইন নিয়েছেন ??? আমি ঠিক পরীক্ষা করেছি এবং এটি ঠিক আছে works
জর্জ স্টাভ্রোব

আমি প্রথমটি চেষ্টা করেছিলাম, আপনার ডেটটাইমটি প্রতিস্থাপন করেছি Sunday রবিবার 10 নভেম্বর 2019 এর প্রতিনিধিত্বকারী একটি ডেটটাইম দিয়ে with এটি সোমবার 4 নভেম্বর 2019 দেওয়া উচিত তবে এটি সোমবার 11 নভেম্বর 2019 দেয় I've আমি এটি এখানে প্রদর্শিত একটি ফ্রিডল
অনুদান জে

5
using System;
using System.Globalization;

namespace MySpace
{
    public static class DateTimeExtention
    {
        // ToDo: Need to provide culturaly neutral versions.

        public static DateTime GetStartOfWeek(this DateTime dt)
        {
            DateTime ndt = dt.Subtract(TimeSpan.FromDays((int)dt.DayOfWeek));
            return new DateTime(ndt.Year, ndt.Month, ndt.Day, 0, 0, 0, 0);
        }

        public static DateTime GetEndOfWeek(this DateTime dt)
        {
            DateTime ndt = dt.GetStartOfWeek().AddDays(6);
            return new DateTime(ndt.Year, ndt.Month, ndt.Day, 23, 59, 59, 999);
        }

        public static DateTime GetStartOfWeek(this DateTime dt, int year, int week)
        {
            DateTime dayInWeek = new DateTime(year, 1, 1).AddDays((week - 1) * 7);
            return dayInWeek.GetStartOfWeek();
        }

        public static DateTime GetEndOfWeek(this DateTime dt, int year, int week)
        {
            DateTime dayInWeek = new DateTime(year, 1, 1).AddDays((week - 1) * 7);
            return dayInWeek.GetEndOfWeek();
        }
    }
}

3
প্রথমে, সম্প্রদায়টিতে স্বাগতম: :) ​​ইতিমধ্যে এই প্রশ্নের বেশ কয়েকটি উচ্চ মানের উত্তর রয়েছে, যার বেশিরভাগই সাত বছর আগে পোস্ট করা হয়েছিল যখন প্রশ্ন জিজ্ঞাসা করা হয়েছিল। আপনার প্রোগ্রামিং সক্ষমতা আরও বাড়ানোর জন্য এই যেমন সাধারণ প্রশ্নের উত্তর দেওয়ার চেষ্টা করা সার্থক অনুশীলন হতে পারে তবে বর্তমান উত্তরটিতে এই উত্তরটি পোস্ট করা প্রশ্নের সাথে কিছু যুক্ত করে না। যদি আপনার উত্তর সম্পর্কে কিছু উপন্যাস থাকে তবে দয়া করে এটি কীভাবে আলাদা এবং এটি কেন আরও ভাল করে তোলে তা বোঝাতে একটি দুটি বাক্য নিন।
এমটিসিস্টার

4

বিশ্বায়নের সাথে এগুলি একসাথে রাখা এবং আমাদের যে কল রয়েছে তার অংশ হিসাবে সপ্তাহের প্রথম দিন নির্দিষ্ট করার অনুমতি দেওয়া

public static DateTime StartOfWeek ( this DateTime dt, DayOfWeek? firstDayOfWeek )
{
    DayOfWeek fdow;

    if ( firstDayOfWeek.HasValue  )
    {
        fdow = firstDayOfWeek.Value;
    }
    else
    {
        System.Globalization.CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentCulture;
        fdow = ci.DateTimeFormat.FirstDayOfWeek;
    }

    int diff = dt.DayOfWeek - fdow;

    if ( diff < 0 )
    {
        diff += 7;
    }

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

}

4
var now = System.DateTime.Now;

var result = now.AddDays(-((now.DayOfWeek - System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek + 7) % 7)).Date;

2

এটি আপনাকে সপ্তাহের প্রথম রবিবার মধ্যরাত দেবে:

DateTime t = DateTime.Now;
t -= new TimeSpan ((int) t.DayOfWeek, t.Hour, t.Minute, t.Second);

এটি আপনাকে মধ্যরাতে প্রথম সোমবার দেয়:

DateTime t = DateTime.Now;
t -= new TimeSpan ((int) t.DayOfWeek - 1, t.Hour, t.Minute, t.Second);

2

সি # দিয়ে এটি ব্যবহার করে দেখুন। এই কোডের সাহায্যে আপনি প্রদত্ত সপ্তাহের প্রথম তারিখ এবং শেষ তারিখ উভয়ই পেতে পারেন Sunday এখানে রবিবার প্রথম দিন এবং শনিবার শেষ দিন তবে আপনি উভয় দিনের সংস্কৃতি অনুযায়ী সেট করতে পারেন

DateTime firstDate = GetFirstDateOfWeek(DateTime.Parse("05/09/2012").Date,DayOfWeek.Sunday);
DateTime lastDate = GetLastDateOfWeek(DateTime.Parse("05/09/2012").Date, DayOfWeek.Saturday);

public static DateTime GetFirstDateOfWeek(DateTime dayInWeek, DayOfWeek firstDay)
{
    DateTime firstDayInWeek = dayInWeek.Date;
    while (firstDayInWeek.DayOfWeek != firstDay)
        firstDayInWeek = firstDayInWeek.AddDays(-1);

    return firstDayInWeek;
}
public static DateTime GetLastDateOfWeek(DateTime dayInWeek, DayOfWeek firstDay)
{
    DateTime lastDayInWeek = dayInWeek.Date;
    while (lastDayInWeek.DayOfWeek != firstDay)
        lastDayInWeek = lastDayInWeek.AddDays(1);

    return lastDayInWeek;
}

2

বেশ কয়েকবার চেষ্টা করেও সোমবার থেকে শুরু হয়ে সপ্তাহের মধ্যে দিয়ে সমস্যার সমাধান করেনি, ফলে আগামী রবিবার আমাকে আসন্ন সোমবার দেবে। সুতরাং আমি এটিকে কিছুটা সংশোধন করেছি এবং এ কোডটি দিয়ে এটি কাজ করেছিলাম:

int delta = DayOfWeek.Monday - DateTime.Now.DayOfWeek;
DateTime monday = DateTime.Now.AddDays(delta == 1 ? -6 : delta);
return monday;

দেখে মনে হচ্ছে যে 'আসন্ন সোমবার' সমস্যাটি সংস্কৃতি নির্ভর (এটি এরিকের উত্তর এবং সার্ভেসারের মন্তব্যও দেখুন)) তবে, যদি রবিবারকে অ্যাকাউন্টে নেওয়ার প্রয়োজন না হয় (সাধারণ ব্যবসায়িক অ্যাপয়েন্টমেন্ট হিসাবে) আপনার সূত্রটি করতে পারে সরলীকৃত:dt.AddDays(DayOfWeek.Monday - dt.DayOfWeek);
দামিয়ান ভোগেল

2

পদক্ষেপ 1: একটি স্ট্যাটিক ক্লাস তৈরি করুন

  public static class TIMEE
{
    public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek)
    {
        int diff = (7 + (dt.DayOfWeek - startOfWeek)) % 7;
        return dt.AddDays(-1 * diff).Date;
    }
    public static DateTime EndOfWeek(this DateTime dt, DayOfWeek startOfWeek)
    {
        int diff = (7 - (dt.DayOfWeek - startOfWeek)) % 7;
        return dt.AddDays(1 * diff).Date;
    }
}

পদক্ষেপ 2: সপ্তাহের শুরু এবং শেষের দিন উভয়ই পেতে এই শ্রেণীটি ব্যবহার করুন

 DateTime dt =TIMEE.StartOfWeek(DateTime.Now ,DayOfWeek.Monday);
        DateTime dt1 = TIMEE.EndOfWeek(DateTime.Now, DayOfWeek.Sunday);

(6 - (dt.DayOfWeek - startOfWeek)) % 7আমার লেখা ইউনিট পরীক্ষার বিপরীতে আমার জন্য সপ্তাহের শেষের প্রয়োজন ।
এমএলএইচডিভ

1

নিম্নলিখিত পদ্ধতিটি আপনার পছন্দসই তারিখটি প্রদান করবে। রবিবার সপ্তাহের প্রথম দিন হিসাবে সোমবারের জন্য মিথ্যা হিসাবে সত্য পাস করুন:

private DateTime getStartOfWeek(bool useSunday)
{
    DateTime now = DateTime.Now;
    int dayOfWeek = (int)now.DayOfWeek;

    if(!useSunday)
        dayOfWeek--;

    if(dayOfWeek < 0)
    {// day of week is Sunday and we want to use Monday as the start of the week
    // Sunday is now the seventh day of the week
        dayOfWeek = 6;
    }

    return now.AddDays(-1 * (double)dayOfWeek);
}

1

উদাহরণের জন্য ধন্যবাদ। আমাকে সপ্তাহের প্রথম দিন সর্বদা "কারেন্টকালচার" ব্যবহার করা দরকার ছিল এবং একটি অ্যারের জন্য আমার সঠিক ডাইনবারকে জানা দরকার ছিল .. সুতরাং এখানে আমার প্রথম বর্ধিতকরণ রয়েছে:

public static class DateTimeExtensions
{
    //http://stackoverflow.com/questions/38039/how-can-i-get-the-datetime-for-the-start-of-the-week
    //http://stackoverflow.com/questions/1788508/calculate-date-with-monday-as-dayofweek1
    public static DateTime StartOfWeek(this DateTime dt)
    {
        //difference in days
        int diff = (int)dt.DayOfWeek - (int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek; //sunday=always0, monday=always1, etc.

        //As a result we need to have day 0,1,2,3,4,5,6 
        if (diff < 0)
        {
            diff += 7;
        }
        return dt.AddDays(-1 * diff).Date;
    }

    public static int DayNoOfWeek(this DateTime dt)
    {
        //difference in days
        int diff = (int)dt.DayOfWeek - (int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek; //sunday=always0, monday=always1, etc.

        //As a result we need to have day 0,1,2,3,4,5,6 
        if (diff < 0)
        {
            diff += 7;
        }
        return diff + 1; //Make it 1..7
    }
}

1

কেউ এখনও এর সঠিক উত্তর দিয়েছে বলে মনে হয় না। কারও প্রয়োজনে আমার সমাধান এখানে পেস্ট করব। নিম্নলিখিত কোডটি সপ্তাহের প্রথম দিন সোমবার বা রবিবার বা অন্য কিছু হলে নির্বিশেষে কাজ করে।

public static class DateTimeExtension
{
  public static DateTime GetFirstDayOfThisWeek(this DateTime d)
  {
    CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentCulture;
    var first = (int)ci.DateTimeFormat.FirstDayOfWeek;
    var current = (int)d.DayOfWeek;

    var result = first <= current ?
      d.AddDays(-1 * (current - first)) :
      d.AddDays(first - current - 7);

    return result;
  }
}

class Program
{
  static void Main()
  {
    System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
    Console.WriteLine("Current culture set to en-US");
    RunTests();
    Console.WriteLine();
    System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("da-DK");
    Console.WriteLine("Current culture set to da-DK");
    RunTests();
    Console.ReadLine();
  }

  static void RunTests()
  {
    Console.WriteLine("Today {1}: {0}", DateTime.Today.Date.GetFirstDayOfThisWeek(), DateTime.Today.Date.ToString("yyyy-MM-dd"));
    Console.WriteLine("Saturday 2013-03-02: {0}", new DateTime(2013, 3, 2).GetFirstDayOfThisWeek());
    Console.WriteLine("Sunday 2013-03-03: {0}", new DateTime(2013, 3, 3).GetFirstDayOfThisWeek());
    Console.WriteLine("Monday 2013-03-04: {0}", new DateTime(2013, 3, 4).GetFirstDayOfThisWeek());
  }
}

1

সি # তে থাকা মডুলো -1 মড 7 এর জন্য খারাপ কাজ করে (6, সি # রিটার্ন হওয়া উচিত -১) সুতরাং ... এর জন্য "অনলাইনার" সমাধানটি এর মতো দেখতে পাবেন :)

private static DateTime GetFirstDayOfWeek(DateTime date)
    {
        return date.AddDays(-(((int)date.DayOfWeek - 1) - (int)Math.Floor((double)((int)date.DayOfWeek - 1) / 7) * 7));
    }

1

সপ্তাহের শেষের দিকে একই (এটির উত্তরটি কমপ্লায়ার শৈলীতে):

    public static DateTime EndOfWeek(this DateTime dt)
    {
        int diff = 7 - (int)dt.DayOfWeek;

        diff = diff == 7 ? 0 : diff;

        DateTime eow = dt.AddDays(diff).Date;

        return new DateTime(eow.Year, eow.Month, eow.Day, 23, 59, 59, 999) { };
    }

0

আপনি চমৎকার ছাতা লাইব্রেরি ব্যবহার করতে পারেন :

using nVentive.Umbrella.Extensions.Calendar;
DateTime beginning = DateTime.Now.BeginningOfWeek();

যাইহোক, তারা না সোমবার সপ্তাহ (সম্পত্তি দেখতে প্রথম দিন হিসাবে সংরক্ষিত হয়েছে বলে মনে হচ্ছে nVentive.Umbrella.Extensions.Calendar.DefaultDateTimeCalendarExtensions.WeekBeginsOn), যাতে পূর্ববর্তী স্থানীয় সমাধান একটু ভাল। দু: খজনক।

সম্পাদনা করুন : প্রশ্নের কাছাকাছি তাকিয়ে দেখে মনে হচ্ছে ছাতা আসলে এর জন্যও কাজ করতে পারে:

// Or DateTime.Now.PreviousDay(DayOfWeek.Monday)
DateTime monday = DateTime.Now.PreviousMonday(); 
DateTime sunday = DateTime.Now.PreviousSunday();

যদিও এটি লক্ষণীয় যে আপনি যদি গত সোমবার সোমবারের জন্য জিজ্ঞাসা করেন তবে এটি আপনাকে সাত দিন আগে দেবে। তবে এটি আপনি যদি ব্যবহার করেন তবে এটি সত্য BeginningOfWeek, যা বাগের মতো মনে হয় :(।


0

এটি সপ্তাহের শুরু এবং সপ্তাহের শেষের তারিখ উভয়ই ফিরে আসবে:

    private string[] GetWeekRange(DateTime dateToCheck)
    {
        string[] result = new string[2];
        TimeSpan duration = new TimeSpan(0, 0, 0, 0); //One day 
        DateTime dateRangeBegin = dateToCheck;
        DateTime dateRangeEnd = DateTime.Today.Add(duration);

        dateRangeBegin = dateToCheck.AddDays(-(int)dateToCheck.DayOfWeek);
        dateRangeEnd = dateToCheck.AddDays(6 - (int)dateToCheck.DayOfWeek);

        result[0] = dateRangeBegin.Date.ToString();
        result[1] = dateRangeEnd.Date.ToString();
        return result;

    }

আমি আমার ব্লগ জামিরসব্লগে সপ্তাহ, মাস, ত্রৈমাসিক এবং বছরের শুরু / শেষ গণনা করার জন্য সম্পূর্ণ কোড পোস্ট করেছি


0
    namespace DateTimeExample
    {
        using System;

        public static class DateTimeExtension
        {
            public static DateTime GetMonday(this DateTime time)
            {
                if (time.DayOfWeek != DayOfWeek.Monday)
                    return GetMonday(time.AddDays(-1)); //Recursive call

                return time;
            }
        }

        internal class Program
        {
            private static void Main()
            {
                Console.WriteLine(DateTime.Now.GetMonday());
                Console.ReadLine();
            }
        }
    } 

আপনি কি নিজের কোডটির ব্যাখ্যা অন্তর্ভুক্ত করতে আপনার উত্তরটি প্রসারিত করতে পারেন? এটি আপনার ভাবার চেয়ে পাঠককে আরও সহায়তা করে।
gunr2171

পুনরাবৃত্তি ব্যবহার করা খুব খারাপ বাস্তবায়ন। আপনি কেবল পুনরাবৃত্তি ব্যবহার করতে পারার অর্থ এই নয় যে আপনার উচিত। এটি এখানে সরবরাহিত অন্যান্য সমাধানের চেয়ে ধীর এবং আরও মেমরির নিবিড় হবে।
মিকচামিমো

0

এখানে কয়েকটি উত্তরের সংমিশ্রণ দেওয়া হল। এটি একটি এক্সটেনশন পদ্ধতি ব্যবহার করে যা সংস্কৃতিটি পাস করার অনুমতি দেয়, যদি কোনওটি পাস না করা হয় তবে বর্তমান সংস্কৃতি ব্যবহৃত হয়। এটি এটিকে সর্বাধিক নমনীয়তা এবং পুনরায় ব্যবহার দেবে।

/// <summary>
/// Gets the date of the first day of the week for the date.
/// </summary>
/// <param name="date">The date to be used</param>
/// <param name="cultureInfo">If none is provided, the current culture is used</param>
/// <returns>The date of the beggining of the week based on the culture specifed</returns>
public static DateTime StartOfWeek(this DateTime date, CultureInfo cultureInfo=null) =>         
             date.AddDays(-1 * (7 + (date.DayOfWeek - (cultureInfo??CultureInfo.CurrentCulture).DateTimeFormat.FirstDayOfWeek)) % 7).Date;

ব্যবহারের উদাহরণ:

public static void TestFirstDayOfWeekExtension() {          
        DateTime date = DateTime.Now;
        foreach(System.Globalization.CultureInfo culture in CultureInfo.GetCultures(CultureTypes.UserCustomCulture | CultureTypes.SpecificCultures)) {
            Console.WriteLine($"{culture.EnglishName}: {date.ToShortDateString()} First Day of week: {date.StartOfWeek(culture).ToShortDateString()}");
        }
    }

0

আপনি যদি শনিবার বা রবিবার বা সপ্তাহের কোনও দিন চান তবে বর্তমান সপ্তাহের বেশি না (শনি-সান) আমি আপনাকে এই কোডের টুকরো দিয়ে আচ্ছাদিত করেছি।

public static DateTime GetDateInCurrentWeek(this DateTime date, DayOfWeek day)
{
    var temp = date;
    var limit = (int)date.DayOfWeek;
    var returnDate = DateTime.MinValue;

    if (date.DayOfWeek == day) return date;

    for (int i = limit; i < 6; i++)
    {
        temp = temp.AddDays(1);

        if (day == temp.DayOfWeek)
        {
            returnDate = temp;
            break;
        }
    }
    if (returnDate == DateTime.MinValue)
    {
        for (int i = limit; i > -1; i++)
        {
            date = date.AddDays(-1);

            if (day == date.DayOfWeek)
            {
                returnDate = date;
                break;
            }
        }
    }
    return returnDate;
}

0

আমরা ওয়ান-লাইনারগুলি পছন্দ করি: বর্তমান সংস্কৃতির সপ্তাহের প্রথম দিন এবং বর্তমান দিনের মধ্যে পার্থক্য পান তারপরে বর্তমান দিন থেকে দিনের সংখ্যা বিয়োগ করুন

var weekStartDate = DateTime.Now.AddDays(-((int)now.DayOfWeek - (int)DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek));

0

এই উত্তরটি সংকলন করা থেকে অনুসরণ করে, সপ্তাহের যে কোনও দিনের তারিখ পাওয়ার জন্য নিম্নলিখিত পদ্ধতিটি ব্যবহার করুন:

public static DateTime GetDayOfWeek(this DateTime dt, DayOfWeek day)
{            
    int diff = (7 + (dt.DayOfWeek - DayOfWeek.Monday)) % 7;
    var monday = dt.AddDays(-1 * diff).Date;

    switch (day)
    {
        case DayOfWeek.Tuesday:
            return monday.AddDays(1).Date;

        case DayOfWeek.Wednesday:
            return monday.AddDays(2).Date;

        case DayOfWeek.Thursday:
            return monday.AddDays(3).Date;

        case DayOfWeek.Friday:
            return monday.AddDays(4).Date;

        case DayOfWeek.Saturday:
            return monday.AddDays(5).Date;

        case DayOfWeek.Sunday:
            return monday.AddDays(6).Date;
    }

    return monday;
}

0

পুনরাবৃত্তি ব্যবহার করে এমন একটি ফাংশন তৈরি করার চেষ্টা করুন। আপনার ডেটটাইম অবজেক্টটি একটি ইনপুট এবং ফাংশনটি একটি নতুন ডেটটাইম অবজেক্ট দেয় যা সপ্তাহের শুরুতে দাঁড়ায়।

    DateTime WeekBeginning(DateTime input)
    {
        do
        {
            if (input.DayOfWeek.ToString() == "Monday")
                return input;
            else
                return WeekBeginning(input.AddDays(-1));
        } while (input.DayOfWeek.ToString() == "Monday");
    }

এই কোডটি কীভাবে এবং কেন এই সমস্যার সমাধান করে তার ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে যদিও আপনার পোস্টের গুণমান উন্নত করতে সত্যই সহায়তা করবে এবং সম্ভবত আরও বেশি ভোটের ফলাফল হবে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, কেবল এখনই জিজ্ঞাসা করা ব্যক্তি নয়। দয়া করে সম্পাদনা ব্যাখ্যা যোগ করতে পারেন এবং সীমাবদ্ধতা এবং অনুমানের কি প্রয়োগ একটি ইঙ্গিত দিতে আপনার উত্তর।
ডেভিড বাক

0

এইভাবে গণনা করা আপনাকে সপ্তাহের কোন দিনটি একটি নতুন সপ্তাহের সূচনা নির্দেশ করে (উদাহরণস্বরূপ আমি সোমবার বেছে নিয়েছি) বেছে নিতে দেয়।

দ্রষ্টব্য যে সোমবারের জন্য এই গণনাটি করা বর্তমান সোমবারকে দেবে , আগেরটি নয়।

//Replace with whatever input date you want
DateTime inputDate = DateTime.Now;

//For this example, weeks start on Monday
int startOfWeek = (int)DayOfWeek.Monday;

//Calculate the number of days it has been since the start of the week
int daysSinceStartOfWeek = ((int)inputDate.DayOfWeek + 7 - startOfWeek) % 7;

DateTime previousStartOfWeek = inputDate.AddDays(-daysSinceStartOfWeek);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.