সি # তে আগের মাসের প্রথম এবং শেষ দিনের তারিখ পান


140

আমি এমন সহজ এক বা দুটি লাইনারের কথা ভাবতে পারি না যা আগের মাসগুলি প্রথম দিন এবং শেষ দিন পাবে।

আমি একটি সমীক্ষার ওয়েব অ্যাপ্লিকেশন লিনকুই-আইফিং করছি এবং তারা এতে একটি নতুন প্রয়োজনীয়তা গ্রাস করেছে।

জরিপে অবশ্যই পূর্ববর্তী মাসের পরিষেবা সংক্রান্ত সমস্ত অনুরোধ অন্তর্ভুক্ত করা উচিত। সুতরাং এটি যদি 15 ই এপ্রিল হয়, আমার সমস্ত অনুরোধ আইডির প্রয়োজন।

var RequestIds = (from r in rdc.request 
                  where r.dteCreated >= LastMonthsFirstDate && 
                  r.dteCreated <= LastMonthsLastDate 
                  select r.intRequestId);

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

উত্তর:


303
var today = DateTime.Today;
var month = new DateTime(today.Year, today.Month, 1);       
var first = month.AddMonths(-1);
var last = month.AddDays(-1);

আপনার যদি সত্যিই এক বা দুটি লাইনের প্রয়োজন হয় তবে সেগুলি ইন-লাইন করুন।


2
আইআইআরসি ডেটটাইম.আজ আজ একটি বেশ ব্যয়বহুল কল, তাই আপনি প্রথমে একটি ভেরিয়েবলের মধ্যে মানটি আরও ভাল করে সঞ্চয় করতে পারেন। ভাল উত্তর যাহাই হউক না কেন :)
লিয়ান্দ্রো লোপেজ

2
@ এন্ডলির এখানে একটি দুর্দান্ত লাইব্রেরি রয়েছে যা আপনার যেমন ফ্লুংডেটটাইম কোড কোডপ্লেক্স.কমের
ম্যাথিউ লক

@ ম্যাথেজলক, লিঙ্কটি নষ্ট হয়ে গেছে বলে মনে হচ্ছে।
গিলারমো গুটিরিজ


2
আমি কেবল উল্লেখ করতে চাই যে এন্ট্রিগুলি পুরো ডেটটাইম ব্যবহার করে এএটি সংরক্ষণ করা হয় তবে এই ক্যোয়ারী মাসের শেষ দিন 12:00 এএম পরে শুরু হওয়া কোনও পুনরুদ্ধার করতে ব্যর্থ হতে পারে। আপনি গত লাইন = মাস পড়ার জন্য শেষ লাইনটি পরিবর্তন করে এটি সমাধান করতে পারেন dএডটিক্স (-1);
ছয়শো

23

অতীতে আমি যেভাবে এটি করেছি তা প্রথম এই মাসের প্রথম দিন

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

তারপরে গত মাসের শেষের জন্য একটি দিন বিয়োগ করুন

dLastDayOfLastMonth = dFirstDayOfThisMonth.AddDays (-1);

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

dFirstDayOfLastMonth = dFirstDayOfThisMonth.AddMonths(-1);

4
+1, তবে পেডেন্টিক হওয়ার জন্য, আপনি ডেটটাইম মূল্যায়ন করুন odআজক একবার একবার স্থানীয় ভেরিয়েবলে সঞ্চয় করছেন। যদি আপনার কোডটি মধ্যরাতের আগে একটি ন্যানোসেকেন্ডটি কার্যকর করতে শুরু করে, ডেটটাইমকে টানা দু'বার কল T আজকে বিভিন্ন মান ফিরে আসতে পারে।
জো

হ্যাঁ, ধন্যবাদ, আপনারা সবাই সংশোধন করেছেন, এমনকি পেডেন্টিক ত্রুটিটিও ঠিক করেছেন।
মাইকডাব্লু


1
যেমন তুলনা করা হয় upvoted return date.AddDays(-(date.Day-1))বনাম return new DateTime(date.Year, date.Month, 1);প্রথম 2000 পুনরাবৃত্তিও কর্মক্ষমতা উত্তম (923ms 809ms বনাম আপ newing একই বস্তুর ফিরে)
Terry_Brown



5

আমি এই সাধারণ ওয়ান-লাইনারটি ব্যবহার করি:

public static DateTime GetLastDayOfPreviousMonth(this DateTime date)
{
    return date.AddDays(-date.Day);
}

সচেতন থাকুন, এটি সময় ধরে রাখে।


1
আমি যা চেয়েছিলাম তা হল, সংক্ষিপ্ত প্রকাশটি আমি কোনও তারের ভিতরে ব্যবহার করতে পারি। ধন্যবাদ!
জো ব্যালার্ড

4

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

class Program
{
    static void Main(string[] args)
    {
        DateTime t = DateTime.Now;

        DateTime p = t.PreviousMonthFirstDay();
        Console.WriteLine( p.ToShortDateString() );

        p = t.PreviousMonthLastDay();
        Console.WriteLine( p.ToShortDateString() );


        Console.ReadKey();
    }
}


public static class Helpers
{
    public static DateTime PreviousMonthFirstDay( this DateTime currentDate )
    {
        DateTime d = currentDate.PreviousMonthLastDay();

        return new DateTime( d.Year, d.Month, 1 );
    }

    public static DateTime PreviousMonthLastDay( this DateTime currentDate )
    {
        return new DateTime( currentDate.Year, currentDate.Month, 1 ).AddDays( -1 );
    }
}

কিছু অনুপ্রাণিত ডেটটাইম এক্সটেনশনের জন্য এই লিঙ্কটি http://www.codeplex.com/fluentdatetime দেখুন ।


3

ই-কমার্সে প্রচলিত ব্যবহারের ক্ষেত্রে ক্রেডিট কার্ডের মেয়াদ শেষ হওয়ার তারিখ, এমএম / ওয়াই y এক দিনের পরিবর্তে এক সেকেন্ড বিয়োগ করুন। অন্যথায় কার্ডটির মেয়াদ শেষ হওয়ার মাসের পুরো শেষ দিনের জন্য উপস্থিত হবে expired

DateTime expiration = DateTime.Parse("07/2013");
DateTime endOfTheMonthExpiration = new DateTime(
  expiration.Year, expiration.Month, 1).AddMonths(1).AddSeconds(-1);

1

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

DateTime now = DateTime.Now;
DateTime thisMonth = new DateTime(now.Year, now.Month, 1);
DateTime lastMonth = thisMonth.AddMonths(-1);

var RequestIds = rdc.request
  .Where(r => lastMonth <= r.dteCreated)
  .Where(r => r.dteCreated < thisMonth)
  .Select(r => r.intRequestId);

1
DateTime now = DateTime.Now;
int prevMonth = now.AddMonths(-1).Month;
int year = now.AddMonths(-1).Year;
int daysInPrevMonth = DateTime.DaysInMonth(year, prevMonth);
DateTime firstDayPrevMonth = new DateTime(year, prevMonth, 1);
DateTime lastDayPrevMonth = new DateTime(year, prevMonth, daysInPrevMonth);
Console.WriteLine("{0} {1}", firstDayPrevMonth.ToShortDateString(),
  lastDayPrevMonth.ToShortDateString());

1
ডেটটাইম.নাউ প্রথম কলটিতে ২০০৯-০১-৩১ এবং দ্বিতীয় কলটিতে ২০০৯-০২-০১ উপার্জন করবে কি?
অ্যামি বি

1

এটি মাইক ডব্লিউর উত্তরটি নিয়ে দেখুন:

internal static DateTime GetPreviousMonth(bool returnLastDayOfMonth)
{
    DateTime firstDayOfThisMonth = DateTime.Today.AddDays( - ( DateTime.Today.Day - 1 ) );
    DateTime lastDayOfLastMonth = firstDayOfThisMonth.AddDays (-1);
    if (returnLastDayOfMonth) return lastDayOfLastMonth;
    return firstDayOfThisMonth.AddMonths(-1);
}

আপনি এটিকে এভাবে কল করতে পারেন:

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