প্রদত্ত ডেটটাইম অবজেক্টটি ব্যবহার করে এক মাসের প্রথম এবং শেষ দিন


196

আমি মাসের প্রথম দিন এবং শেষ দিনটি পেতে চাই যেখানে একটি নির্দিষ্ট তারিখ থাকে। তারিখটি কোনও ইউআই ক্ষেত্রের মান থেকে আসে।

আমি যদি সময় পিকার ব্যবহার করি তবে আমি বলতে পারি

var maxDay = dtpAttendance.MaxDate.Day;

তবে আমি এটি ডেটটাইম অবজেক্ট থেকে পাওয়ার চেষ্টা করছি। তাই যদি আমার এই ...

DateTime dt = DateTime.today;

মাসের প্রথম দিন এবং শেষ দিনটি কীভাবে পাবেন dt?


আপনি কী জিজ্ঞাসা করছেন তা পরিষ্কার নয়। _Dateভেরিয়েবলে একক মান সঞ্চিত আছে । আপনি যে মানটি থেকে কী পেতে চান?
ডেভিড

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

আপনি কি করতে চান তা জিজ্ঞাসা করা ভাল ? আপনি কি করতে চান যে মত না? অন্য ব্যবহার আপনাকে সঠিকভাবে পরামর্শ দিতে পারে।
শেল

2
@ ছাথুরঙ্গ আপনি জানেন যে কোনও মাসের সর্বনিম্ন তারিখটি কী হবে .... তবে প্রশ্নটি হ'ল চলতি মাসের শেষ তারিখটি কোনটি .. আপনি এইরকম পেতে পারেন .. বর্তমান তারিখে 1 মাস যোগ করুন এবং সেই থেকে বিয়োগ 1 দিন হবে তারিখ .. এখন আপনি আপনার চলতি মাসের শেষ তারিখটি পাবেন
শেল

উত্তর:


472

DateTimeকাঠামো মানগুলির সীমা নয়, কেবল একটি মান সঞ্চয় করে। MinValueএবং MaxValueস্থিতিশীল ক্ষেত্র, যা DateTimeকাঠামোর উদাহরণগুলির জন্য সম্ভাব্য মানগুলির ব্যাপ্তি ধারণ করে । এই ক্ষেত্রগুলি স্থির এবং নির্দিষ্ট উদাহরণের সাথে সম্পর্কিত নয় DateTime। তারা DateTimeনিজেরাই টাইপের সাথে সম্পর্কিত ।

প্রস্তাবিত পড়া: স্থির (সি # রেফারেন্স)

আপডেট: মাসের পরিসীমা পাওয়া:

DateTime date = ...
var firstDayOfMonth = new DateTime(date.Year, date.Month, 1);
var lastDayOfMonth = firstDayOfMonth.AddMonths(1).AddDays(-1);

16
আমি জানি আমি এখানে খুঁতখুঁতে হচ্ছে, কিন্তু করা উচিত নয় lastDayofMonthহতে firstDayOfMonth.AddMonths(1).AddSeconds(-1);?
কার্ল জের্তসেন

36
@ কার্লজিগার্টসেন আপনি যথেষ্ট বাছাই করেননি :) নিখুঁত সমাধান হবে AddTicks(-1)তবে আমরা যদি সময়ের অংশের বিষয়ে চিন্তা না করে এবং কেবল তারিখের অংশের বিষয়ে চিন্তা না করি তবে দিনগুলি ভাল কাজ করবে
সের্গে বেরেজভস্কিই

7
এখন তা পিক হচ্ছে! ;-) প্রশ্নটি বলে না যে মানগুলি কীভাবে ব্যবহৃত হবে, সুতরাং আমি রক্ষণাত্মকভাবে কোড প্রবণতা করি।
কার্ল জের্তসেন

@ সেরজেবিরেজভস্কি আমি এই বিষয়টি উত্থাপন করতে ঘৃণা করব কিন্তু আপনি যখন এই জাতীয় তারিখটি নতুন করে তৈরি করবেন তখন সময়কালীন তথ্যটি হারাবেন না? মূল ডেটটাইম উদাহরণের সাথে টাইমজোন সম্পর্কিত যা কিছু তথ্য সংযুক্ত ছিল আপনি যখন এ জাতীয় কোনও নতুন উদাহরণ তৈরি করেন তখন তা হারিয়ে যায়।
মার্কো

2
@ কার্লজিজার্টসেন, আপনি পিক দেখতে চান ... আমি ব্যক্তিগতভাবে এর < firstDayOfNextMonthপরিবর্তে করি <= lastDayOfMonth। এই উপায়টি গ্রানুলারিটি নির্বিশেষে সর্বদা কাজ করবে। (আমি নিশ্চিত টিক্স ঠিকঠাক হবে তবে ভবিষ্যতে কী নিয়ে আসে ... ন্যানোটিক্স কে জানে?)
adam0101

99

এটি @ সার্জি এবং @ স্টিফেনের উত্তরগুলিতে আরও দীর্ঘ মন্তব্য। অতীতে নিজেও অনুরূপ কোড লিখেছি আমি স্বচ্ছতার বিষয়টি স্মরণে রাখার সময় সর্বাধিক পারফরম্যান্স কী তা যাচাই করার সিদ্ধান্ত নিয়েছি ।

ফলাফল

এখানে 10 মিলিয়ন পুনরাবৃত্তির জন্য পরীক্ষার রান ফলাফল রয়েছে:

2257 ms for FirstDayOfMonth_AddMethod()
2406 ms for FirstDayOfMonth_NewMethod()
6342 ms for LastDayOfMonth_AddMethod()
4037 ms for LastDayOfMonth_AddMethodWithDaysInMonth()
4160 ms for LastDayOfMonth_NewMethod()
4212 ms for LastDayOfMonth_NewMethodWithReuseOfExtMethod()
2491 ms for LastDayOfMonth_SpecialCase()

কোড

সংকলক অপ্টিমাইজেশন চালু করে পরীক্ষা চালানোর জন্য আমি লিনকিপ্যাড 4 (সি # প্রোগ্রাম মোডে) ব্যবহার করেছি । স্বচ্ছতা এবং সুবিধার জন্য এক্সটেনশন পদ্ধতি হিসাবে পরীক্ষিত কোডটি এখানে দেওয়া হয়েছে:

public static class DateTimeDayOfMonthExtensions
{
    public static DateTime FirstDayOfMonth_AddMethod(this DateTime value)
    {
        return value.Date.AddDays(1 - value.Day);
    }

    public static DateTime FirstDayOfMonth_NewMethod(this DateTime value)
    {
        return new DateTime(value.Year, value.Month, 1);
    }

    public static DateTime LastDayOfMonth_AddMethod(this DateTime value)
    {
        return value.FirstDayOfMonth_AddMethod().AddMonths(1).AddDays(-1);
    }

    public static DateTime LastDayOfMonth_AddMethodWithDaysInMonth(this DateTime value)
    {
        return value.Date.AddDays(DateTime.DaysInMonth(value.Year, value.Month) - value.Day);
    }

    public static DateTime LastDayOfMonth_SpecialCase(this DateTime value)
    {
        return value.AddDays(DateTime.DaysInMonth(value.Year, value.Month) - 1);
    }

    public static int DaysInMonth(this DateTime value)
    {
        return DateTime.DaysInMonth(value.Year, value.Month);
    }

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

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

void Main()
{
    Random rnd = new Random();
    DateTime[] sampleData = new DateTime[10000000];

    for(int i = 0; i < sampleData.Length; i++) {
        sampleData[i] = new DateTime(1970, 1, 1).AddDays(rnd.Next(0, 365 * 50));
    }

    GC.Collect();
    System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();
    for(int i = 0; i < sampleData.Length; i++) {
        DateTime test = sampleData[i].FirstDayOfMonth_AddMethod();
    }
    string.Format("{0} ms for FirstDayOfMonth_AddMethod()", sw.ElapsedMilliseconds).Dump();

    GC.Collect();
    sw.Restart();
    for(int i = 0; i < sampleData.Length; i++) {
        DateTime test = sampleData[i].FirstDayOfMonth_NewMethod();
    }
    string.Format("{0} ms for FirstDayOfMonth_NewMethod()", sw.ElapsedMilliseconds).Dump();

    GC.Collect();
    sw.Restart();
    for(int i = 0; i < sampleData.Length; i++) {
        DateTime test = sampleData[i].LastDayOfMonth_AddMethod();
    }
    string.Format("{0} ms for LastDayOfMonth_AddMethod()", sw.ElapsedMilliseconds).Dump();

    GC.Collect();
    sw.Restart();
    for(int i = 0; i < sampleData.Length; i++) {
        DateTime test = sampleData[i].LastDayOfMonth_AddMethodWithDaysInMonth();
    }
    string.Format("{0} ms for LastDayOfMonth_AddMethodWithDaysInMonth()", sw.ElapsedMilliseconds).Dump();

    GC.Collect();
    sw.Restart();
    for(int i = 0; i < sampleData.Length; i++) {
        DateTime test = sampleData[i].LastDayOfMonth_NewMethod();
    }
    string.Format("{0} ms for LastDayOfMonth_NewMethod()", sw.ElapsedMilliseconds).Dump();

    GC.Collect();
    sw.Restart();
    for(int i = 0; i < sampleData.Length; i++) {
        DateTime test = sampleData[i].LastDayOfMonth_NewMethodWithReuseOfExtMethod();
    }
    string.Format("{0} ms for LastDayOfMonth_NewMethodWithReuseOfExtMethod()", sw.ElapsedMilliseconds).Dump();

    for(int i = 0; i < sampleData.Length; i++) {
        sampleData[i] = sampleData[i].FirstDayOfMonth_AddMethod();
    }

    GC.Collect();
    sw.Restart();
    for(int i = 0; i < sampleData.Length; i++) {
        DateTime test = sampleData[i].LastDayOfMonth_SpecialCase();
    }
    string.Format("{0} ms for LastDayOfMonth_SpecialCase()", sw.ElapsedMilliseconds).Dump();

}

বিশ্লেষণ

আমি এর কয়েকটি ফলাফল দেখে অবাক হয়েছি।

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

LastDayOfMonth_AddMethodএর বিরুদ্ধে ছিল স্পষ্ট ক্ষতিগ্রস্ত LastDayOfMonth_AddMethodWithDaysInMonth, LastDayOfMonth_NewMethodএবং LastDayOfMonth_NewMethodWithReuseOfExtMethod। দ্রুততম তিনটির মধ্যে এর মধ্যে খুব বেশি কিছু নেই এবং তাই এটি আপনার ব্যক্তিগত পছন্দকে নেমে আসে। আমি LastDayOfMonth_NewMethodWithReuseOfExtMethodএর অন্য কার্যকর এক্সটেনশন পদ্ধতির পুনরায় ব্যবহারের সাথে এর স্পষ্টতা বেছে নিয়েছি । আইএমএইচও এর উদ্দেশ্যটি আরও পরিষ্কার এবং আমি স্বল্প পারফরম্যান্স ব্যয় গ্রহণ করতে রাজি আছি।

LastDayOfMonth_SpecialCaseধরে নিই যে আপনি বিশেষের ক্ষেত্রে মাসের প্রথম প্রদান করছেন যেখানে আপনি ইতিমধ্যে সেই তারিখটি গণনা করেছেন DateTime.DaysInMonthএবং ফলাফল পেতে এটি অ্যাড পদ্ধতি ব্যবহার করে । এটি অন্যান্য সংস্করণগুলির চেয়ে দ্রুত, যেমনটি আপনি প্রত্যাশা করতেন, তবে আপনি যদি গতির জন্য মরিয়া না হন তবে আমি আপনার অস্ত্রাগারে এই বিশেষ কেসটির বিন্দুটি দেখতে পাচ্ছি না।

উপসংহার

আমার পছন্দগুলি সহ এবং স্টেফেনের সাথে আমি সাধারণভাবে চুক্তিতে এটি একটি এক্সটেনশন পদ্ধতির শ্রেণি রয়েছে:

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

    public static int DaysInMonth(this DateTime value)
    {
        return DateTime.DaysInMonth(value.Year, value.Month);
    }

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

আপনি যদি এ পর্যন্ত পেয়ে থাকেন তবে সময়ের জন্য আপনাকে ধন্যবাদ! এটি মজা হয়েছে: ¬)। এই অ্যালগোরিদমগুলির জন্য আপনার কাছে অন্য কোনও পরামর্শ থাকলে দয়া করে মন্তব্য করুন।


5
আপনার প্রচেষ্টার জন্য আপনার কাছে যদিও খুব কম creditণ আছে। এটি দরকারী!
ডিওন ভি।

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

আপনি অন্য একটি বিকল্প মিস করেছেন: LastDayOfMonth_AddMethod_SpecialCase(বা এর মতো কিছু)। প্যারামিটার হিসাবে মাসের প্রথম দিনটি প্রত্যাশা করে, আমি মনে করি দ্রুত হওয়া উচিত যা করা LastDayOfMonth_AddMethodউচিত! সুতরাং এটি হিসাবে সহজ হবে:return value.AddMonths(1).AddDays(-1);
অ্যান্ড্রু

1
ধন্যবাদ @ অ্যান্ড্রু এবং এটি ব্যবহার করে আমার ফলাফলগুলি এখানে রয়েছে: লাস্টডেঅফমনেথ_স্পেশাল কেস () এর জন্য 2835 এমএস, এবং; লাস্টডেঅফমনেথ_এডডমেথোদ_স্পেশাল ক্যাস () এর জন্য 4685 এমএস। কাঠামো তৈরির সময় বিবেচনা করার সময় এবং ডেটটাইমের অভ্যন্তরীণ উপস্থাপনা সম্ভবত দিনগুলিকে একটি সহজ ক্রিয়াকলাপ তৈরি করে কিন্তু মাসগুলিকে আরও জটিল অ্যালগরিদম যুক্ত করে যা সম্ভবত বোধগম্য হয়।
WooWaaobi

15

নেট এপিআই দিয়ে মাসের সীমা পাওয়া (কেবলমাত্র অন্য একটি উপায়):

DateTime date = ...
var firstDayOfMonth = new DateTime(date.Year, date.Month, 1);
var lastDayOfMonth = new DateTime(date.Year, date.Month, DateTime.DaysInMonth(date.Year, date.Month));

6

" Last day of month" আসলে " First day of *next* month, minus 1"। সুতরাং আমি যা ব্যবহার করি তা এখানে, "DaysInMonth" পদ্ধতির দরকার নেই:

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

public static DateTime LastDayOfMonth(this DateTime value)
{
    return value.FirstDayOfMonth()
        .AddMonths(1)
        .AddMinutes(-1);
}

দ্রষ্টব্য: আমি যে কারণটি ব্যবহার করছি AddMinutes(-1)তা AddDays(-1)এখানে নয় কারণ সাধারণত কিছু তারিখের জন্য প্রতিবেদন করার জন্য আপনার এই তারিখের কাজগুলি প্রয়োজন হয় এবং আপনি যখন কোনও সময়ের জন্য একটি প্রতিবেদন তৈরি করেন তখন "শেষের তারিখ" আসলে এমন কিছু হওয়া উচিত Oct 31 2015 23:59:59যাতে আপনার প্রতিবেদনটি সঠিকভাবে কাজ করে - মাসের শেষ দিন থেকে সমস্ত ডেটা সহ।

অর্থাৎ আপনি আসলে এখানে "মাসের শেষ মুহূর্ত " পান। শেষ দিন নয়।

ঠিক আছে, আমি এখন চুপ করে যাচ্ছি।


5
DateTime dCalcDate = DateTime.Now;
dtpFromEffDate.Value = new DateTime(dCalcDate.Year, dCalcDate.Month, 1);
dptToEffDate.Value = new DateTime(dCalcDate.Year, dCalcDate.Month, DateTime.DaysInMonth(dCalcDate.Year, dCalcDate.Month));

সাধারণত কোড-কেবল উত্তরগুলি এড়িয়ে চলুন। descriptionএমন একটি যুক্ত করার কথা বিবেচনা করুন যা আপনার কোড ব্যাখ্যা করতে সহায়তা করে। ধন্যবাদ
মিকিডি

3

এখানে আপনি সেই মাস থেকে 1 দিন মুছে ফেলার চেয়ে চলতি মাসের প্রথম দিনের জন্য এক মাস যোগ করতে পারেন।

DateTime now = DateTime.Now;
var startDate = new DateTime(now.Year, now.Month, 1);
var endDate = startDate.AddMonths(1).AddDays(-1);

2

আপনি যদি কেবল তারিখ সম্পর্কে যত্নশীল হন

var firstDay = new DateTime(date.Year, date.Month, 1, 0, 0, 0, date.Kind);
var lastDay = new DateTime(date.Year, date.Month, 1, 0, 0, 0, date.Kind).AddMonths(1).AddDays(-1);

আপনি যদি সময় সংরক্ষণ করতে চান

var firstDay = new DateTime(date.Year, date.Month, 1, date.Hour, date.Minute, date.Second, date.Kind);
var lastDay = new DateTime(date.Year, date.Month, 1, date.Hour, date.Minute, date.Second, date.Kind).AddMonths(1).AddDays(-1);

এটি ডিসেম্বরের ডুডিয়েই পুরোপুরি ব্যর্থ হবে। এটি "13" মাসের সাথে ডেটটাইম তৈরি করার চেষ্টা করবে এবং ব্যতিক্রম ছুঁড়ে ফেলবে যে এরকম কোনও তারিখ নেই।
পাভেল

১৩ ই ডিসেম্বর কবে থেকে? মোট 12 মাস আছে। আপনি কোন ক্যালেন্ডার ব্যবহার করেন?
ভাইটালি 16

যদি আপনার তারিখটি ডিসেম্বর হয় তবে এটি এক মাস যুক্ত করার চেষ্টা করবে যার ফলশ্রুতি ব্যতিক্রম হবে। নতুন ডেটটাইম (তারিখ.ইয়ার, 12+ 1, 1, 0, 0, 0, তারিখ.প্রকাশ) .এডডেস (-1); তারিখের সময় তৈরি হওয়ার পরে এটি থেকে এক দিন বিয়োগ করা হবে যাতে ডিসেম্বরের জন্য "13" মাসের জন্য তারিখ চেষ্টা করার পরে এটি ব্যর্থ হবে। আপনি চেষ্টা করতে পারেন.
পাভেল

1

এখানে গৃহীত উত্তরটি ডেটটাইম উদাহরণের ধরণটিকে বিবেচনা করে না। উদাহরণস্বরূপ যদি আপনার আসল ডেটটাইম উদাহরণটি যদি কোনও ইউটিসি ধরনের হয় তবে একটি নতুন ডেটটাইম উদাহরণ তৈরি করে আপনি একটি অজানা প্রকারের উদাহরণ তৈরি করবেন যা সার্ভার সেটিংসের ভিত্তিতে স্থানীয় সময় হিসাবে বিবেচিত হবে। সুতরাং মাসের প্রথম এবং শেষ তারিখ পাওয়ার আরও সঠিক উপায় হ'ল:

var now = DateTime.UtcNow;
var first = now.Date.AddDays(-(now.Date.Day - 1));
var last = first.AddMonths(1).AddTicks(-1);

এইভাবে ডেটটাইম দৃষ্টান্তের আসল প্রকারটি সংরক্ষণ করা হয়।


1

আর একবার চেষ্টা কর:

string strDate = DateTime.Now.ToString("MM/01/yyyy");

1

আমি এটি আমার স্ক্রিপ্টে ব্যবহার করেছি (আমার জন্য কাজ করে) তবে এটি কেবলমাত্র তারিখে এবং কোনও সময় ছাঁটাইয়ের প্রয়োজন ছাড়াই আমার একটি পূর্ণ তারিখের প্রয়োজন ছিল।

public DateTime GetLastDayOfTheMonth()
{
    int daysFromNow = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month) - (int)DateTime.Now.Day;
    return DateTime.Now.AddDays(daysFromNow);
}

1

একবার চেষ্টা করে দেখুন এটি মূলত কতগুলি দিন কেটে গেছে তার গণনা করে DateTime.Now, সেখান থেকে একটিকে বিয়োগ করে এবং বর্তমান মাসের প্রথমটি খুঁজে পেতে নতুন মানটি ব্যবহার করে। সেখান থেকে এটি এটি ব্যবহার করে DateTimeএবং .AddMonths(-1)আগের মাসের প্রথমটি পেতে ব্যবহার করে।

গত মাসের শেষ দিন পাওয়া মূলত একই জিনিসটি ব্যতীত তা করে যা মাসে এক দিন যোগ করে এবং সেই মানটি বিয়োগ করে DateTime.Now.AddDays, যা আপনাকে আগের মাসের শেষ দিন দেয়।

int NumberofDays = DateTime.Now.Day;
int FirstDay = NumberofDays - 1;
int LastDay = NumberofDays + 1;
DateTime FirstofThisMonth = DateTime.Now.AddDays(-FirstDay);
DateTime LastDayOfLastMonth = DateTime.Now.AddDays(-LastDay);
DateTime CheckLastMonth = FirstofThisMonth.AddMonths(-1);

0

পার্সিয়ান সংস্কৃতি জন্য

PersianCalendar pc = new PersianCalendar();            

var today = pc.GetDayOfMonth(DateTime.Now);
var firstDayOfMonth = pc.GetDayOfMonth(DateTime.Now.AddDays(-(today-1)));
var lastDayOfMonth = pc.GetDayOfMonth(DateTime.Now.AddMonths(1).AddDays(-today));            
Console.WriteLine("First day "+ firstDayOfMonth);
Console.WriteLine("Last day " + lastDayOfMonth);

0

তুমি এটা করতে পার

DateTime dt = DateTime.Now; 
DateTime firstDayOfMonth = new DateTime(dt.Year, date.Month, 1);
DateTime lastDayOfMonth = firstDayOfMonth.AddMonths(1).AddDays(-1);

-1

এটি করার সহজ উপায়

Begin = new DateTime(DateTime.Now.Year, DateTime.Now.Month,1).ToShortDateString();
End = new DataFim.Text = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month)).ToShortDateString();

এই কোডটি "নতুন ডেটাফিম.টেক্সট" এর কারণে সংকলন করে না।
ওয়াজনার

-1
DateTime dCalcDate = DateTime.Now;
var startDate = new DateTime(Convert.ToInt32(Year), Convert.ToInt32(Month), 1);
var endDate = new DateTime(Convert.ToInt32(Year), Convert.ToInt32(Month), DateTime.DaysInMonth((Convert.ToInt32(Year)), Convert.ToInt32(Month)));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.