আমি কীভাবে এক মাসের শেষ দিন পেতে পারি?


324

আমি সি # তে কিভাবে মাসের শেষ দিনটি খুঁজে পাব?

উদাহরণস্বরূপ, আমার যদি 03/08/1980 তারিখ থাকে তবে আমি 8 মাসের শেষ দিনটি কীভাবে পেতে পারি (এই ক্ষেত্রে 31)?


2
@ মার্ক: আমি কীসের জন্য জিজ্ঞাসা করতে পারি? আমি মনে করি আপনার নিজের উত্তরের কোনও এক্সটেনশন পদ্ধতির প্রয়োজন নেই।
আবাতিশ শেভ

4
শেষ দিনটি কেবলমাত্র মাসের সাথে সুনির্দিষ্ট নয়, আপনার বছরেরও দরকার। ফেব্রুয়ারি 2010 শেষ দিন 28, কিন্তু ফেব্রুয়ারি 2008 শেষ দিন 29 হয়
Guffa

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

উত্তর:


653

মাসের শেষ দিনটি আপনি এভাবে পান যা 31:

DateTime.DaysInMonth(1980, 08);

28
পাবলিক স্ট্যাটিক ডেটটাইম কনভার্টটোস্টলাস্টডায়অফমুন্থ (তারিখটাইম তারিখ) new নতুন ডেটটাইম (তারিখ.আর, তারিখ.মোনথ, ডেটটাইম.ডাইসইনমোনথ (তারিখ.ইয়ার, তারিখ.মোনথ)) ফেরত দিন; date তারিখের ফরম্যাটে মাসের শেষ দিনটি পেতে
regisbsb

175
var lastDayOfMonth = DateTime.DaysInMonth(date.Year, date.Month);

@ হেনক আসলে আমি এটি আমাদের উত্সের এমন একটি জায়গা থেকে টেনেছি যা এর DateTimeথেকে তৈরি করে lastDayOfMonth। সত্যিই যে কোনওভাবে পুরোপুরি ভাল কাজ করে। এটি একটি পেডেন্টিক যুক্তি যা উপায় ভাল। আমি এটি উভয়ভাবেই করেছি এবং উভয়ই একই উত্তর পেয়েছি।
চিহ্নিত করুন

37

আপনি যদি এক মাস এবং এক বছর দেওয়া তারিখটি চান তবে এটি সঠিক সম্পর্কে মনে হচ্ছে:

public static DateTime GetLastDayOfMonth(this DateTime dateTime)
{
    return new DateTime(dateTime.Year, dateTime.Month, DateTime.DaysInMonth(dateTime.Year, dateTime.Month));
}

9

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

DateTime lastDay = new DateTime(MyDate.Year,MyDate.Month+1,1).AddDays(-1);

এছাড়াও, ডিসেম্বরের জন্যও যদি আপনার এটির প্রয়োজন হয় তবে:

DateTime lastDay = new DateTime(MyDate.Year,MyDate.Month,1).AddMonths(1).AddDays(-1);

6

আপনি এই কোড দ্বারা যে কোনও মাসের শেষ তারিখটি পেতে পারেন:

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

6

আপনি কোডের একক লাইন দ্বারা মাসের শেষ দিনটি সন্ধান করতে পারেন:

int maxdt = (new DateTime(dtfrom.Year, dtfrom.Month, 1).AddMonths(1).AddDays(-1)).Day;

এটা আমাকে অবাক করে দিচ্ছে যে সহজ পদ্ধতির পরিবর্তে: DateTime.DaysInMonthকারও কেন এটি অর্জনের জন্য অপঠনযোগ্য এবং জটিল উপায়টির সন্ধান করা উচিত !? - তবে বৈধ সমাধান হিসাবে গ্রহণযোগ্য;)।
shA.t

5

থেকে DateTimePicker:

প্রথম তারিখ:

DateTime first_date = new DateTime(DateTimePicker.Value.Year, DateTimePicker.Value.Month, 1);

শেষ তারিখ:

DateTime last_date = new DateTime(DateTimePicker.Value.Year, DateTimePicker.Value.Month, DateTime.DaysInMonth(DateTimePicker.Value.Year, DateTimePicker.Value.Month));

2

একটি নির্দিষ্ট ক্যালেন্ডারে - এবং একটি এক্সটেনশন পদ্ধতিতে - মাসের শেষ দিন পেতে:

public static int DaysInMonthBy(this DateTime src, Calendar calendar)
{
    var year = calendar.GetYear(src);                   // year of src in your calendar
    var month = calendar.GetMonth(src);                 // month of src in your calendar
    var lastDay = calendar.GetDaysInMonth(year, month); // days in month means last day of that month in your calendar
    return lastDay;
}

2
// Use any date you want, for the purpose of this example we use 1980-08-03.
var myDate = new DateTime(1980,8,3);
var lastDayOfMonth = new DateTime(myDate.Year, myDate.Month, DateTime.DaysInMonth(myDate.Year, myDate.Month));

এই উত্তরটি কেবল প্রশ্নকারীর উদাহরণে সাড়া দেয়। আরও ব্যাপক উত্তর আরও সহায়ক হবে।
স্কট লরেন্স

আপনি যে কোনও তারিখ ইনপুট মান হিসাবে ব্যবহার করতে পারেন তাই আপনি এই সমাধানটি আপনার যে কোনও তারিখের জন্য প্রয়োগ করতে পারেন।
জ্যাস্পার রিসিউউ

1
এটি কিছু তারিখের জন্য ব্যর্থ হবে, চেষ্টা করুন var myDate = new DateTime(1980, 1, 31);(29 তম ফিরিয়ে দিন)
হ্যানস কেঙ্গিং

হান্স কেইং, ঠিক বলেছেন। এই পদ্ধতিটি যদি আগামী মাসে স্রোতের তুলনায় কম দিন থাকে তবে ব্যর্থ হবে। আমি অনুমান করি যে সবচেয়ে সহজ উপায় হ'ল ডেটটাইম.ডাইসইমমন্থ () ব্যবহার করা কিন্তু এটি গ্রহণযোগ্য উত্তর তাই আমার উত্তরটি মুছে ফেলা উচিত।
জ্যাস্পার রিসিউউ

-1

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

today -> +1 month -> set day of month to 1 -> -1 day

অবশ্যই, এটি ধরে নিয়েছে যে আপনার কাছে সেই ধরণের তারিখ গণিত রয়েছে।


এটি সঠিক নয়।
ইজোশুয়াস - মনিকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.