কম্পিউটার টিউটোরিয়াল

C#-এ DateTime.SpecifyKind() মেথড: DateTime-এর Kind প্রোপার্টি পরিবর্তন


C#-এ DateTime.SpecifyKind() মেথডটি একটি নতুন DateTime অবজেক্ট তৈরি করে যার টিক্স (Ticks) মান আগেরটির মতোই থাকে, কিন্তু Kind প্রোপার্টি (Local, Utc, Unspecified) পরিবর্তন করা হয়। এটি টাইমজোন কনভারশন নहीं করে।

সিনট্যাক্স (Syntax)

public static DateTime SpecifyKind(DateTime value, DateTimeKind kind);

প্যারামিটার:

  • value - সোর্স DateTime
  • kind - নতুন Kind (DateTimeKind.Local, DateTimeKind.Utc, DateTimeKind.Unspecified)

DateTimeKind এনামারেশন

মানবর্ণনা
Unspecifiedকোনো টাইমজোন তথ্য নেই (ডিফল্ট)
UtcCoordinated Universal Time
Localসিস্টেমের লোকাল টাইমজোন

উদাহরণ ১: Unspecified থেকে Local-এ পরিবর্তন

using System;
using System.Globalization;

public class Demo
{
    public static void Main()
    {
        DateTime d = new DateTime(2019, 10, 11, 11, 10, 42); // Kind = Unspecified
        DateTime res = DateTime.SpecifyKind(d, DateTimeKind.Local);
        
        Console.WriteLine("Original Kind: " + d.Kind);     // Unspecified
        Console.WriteLine("New Kind: " + res.Kind);         // Local
        Console.WriteLine("Ticks same: " + (d.Ticks == res.Ticks)); // True
    }
}

আউটপুট

Kind = Local

উদাহরণ ২: Unspecified থেকে Utc-এ পরিবর্তন

using System;

public class Demo
{
    public static void Main()
    {
        DateTime d = new DateTime(2019, 11, 25, 10, 20, 35); // Kind = Unspecified
        DateTime res = DateTime.SpecifyKind(d, DateTimeKind.Utc);
        
        Console.WriteLine("Original Kind: " + d.Kind);     // Unspecified
        Console.WriteLine("New Kind: " + res.Kind);         // Utc
        Console.WriteLine("Ticks same: " + (d.Ticks == res.Ticks)); // True
    }
}

আউটপুট

Kind = Utc

SpecifyKind() vs ToUniversalTime() / ToLocalTime()

মেথডটিক্স পরিবর্তন হয়?Kind পরিবর্তন হয়?উদ্দেশ্য
SpecifyKind()নাহ্যাঁশুধু মেটাডেটা (Kind) পরিবর্তন
ToUniversalTime()হ্যাঁহ্যাঁ (→ Utc)লোকাল টাইম → UTC কনভার্সন
ToLocalTime()হ্যাঁহ্যাঁ (→ Local)UTC → লোকাল টাইম কনভার্সন

দৃষ্টান্ত: পার্থক্য দেখা

using System;

public class Demo
{
    public static void Main()
    {
        // অনুমান করুন সিস্টেম টাইমজোন UTC+6 (বাংলাদেশ)
        DateTime unspecified = new DateTime(2023, 1, 1, 12, 0, 0); // Kind=Unspecified
        
        Console.WriteLine($"Original: {unspecified} (Kind: {unspecified.Kind})");
        Console.WriteLine($"Ticks: {unspecified.Ticks}");
        Console.WriteLine();
        
        // SpecifyKind - টিক্স অপরিবর্তিত
        DateTime asLocal = DateTime.SpecifyKind(unspecified, DateTimeKind.Local);
        Console.WriteLine($"As Local: {asLocal} (Kind: {asLocal.Kind})");
        Console.WriteLine($"Ticks: {asLocal.Ticks} (Same: {asLocal.Ticks == unspecified.Ticks})");
        Console.WriteLine();
        
        // ToUniversalTime - টিক্স পরিবর্তন (UTC-এ কনভার্ট)
        DateTime asUtc = unspecified.ToUniversalTime(); // Unspecified কে Local মনে করে
        Console.WriteLine($"ToUniversalTime: {asUtc} (Kind: {asUtc.Kind})");
        Console.WriteLine($"Ticks: {asUtc.Ticks} (Same: {asUtc.Ticks == unspecified.Ticks})");
    }
}

প্রয়োগিক ব্যবহারের ক্ষেত্র

১. ডেটাবেস থেকে পড়া UTC ডেটাকে সঠিক Kind দেয়া

// ডেটাবেসে UTC সংরক্ষিত, কিন্তু Kind=Unspecified আসে
DateTime dbTime = reader.GetDateTime(0); // 2023-01-01 12:00:00, Kind=Unspecified

// সঠিকভাবে UTC হিসেবে মার্ক করা
DateTime utcTime = DateTime.SpecifyKind(dbTime, DateTimeKind.Utc);

// এখন নিরাপদে লোকাল-এ কনভার্ট করা যায়
DateTime localTime = utcTime.ToLocalTime();

২. JSON ডিসিরিয়ালাইজেশনের পর Kind ফিক্স করা

// JSON-এ "2023-01-01T12:00:00Z" (Z = UTC)
// কিছু ডিসিরিয়ালাইজার Kind=Unspecified দিয়ে দেয়
DateTime parsed = JsonSerializer.Deserialize(json);

// ফিক্স
if (parsed.Kind == DateTimeKind.Unspecified)
{
    parsed = DateTime.SpecifyKind(parsed, DateTimeKind.Utc);
}

সতর্কতা: SpecifyKind ব্যবহার করে ভুল Kind সেট করলে (যেমন UTC ডেটাকে Local বলা) পরবর্তী কনভারশনে বড় ত্রুটি হয়।

  1. C#-এ DateTime.Subtract() মেথড: তারিখ বা টাইমস্প্যান বিয়োগ করা

  2. C#-এ DateTime.AddYears() পদ্ধতি

  3. C#-এ DateTime.AddHours() মেথড

  4. C#-এ DateTime.AddDays() মেথড