C#-এ DateTime.FromBinary() মেথডটি একটি ৬৪-বিট বাইনারি মান থেকে মূল DateTime অবজেক্ট পুনরুদ্ধার (deserialize) করতে ব্যবহৃত হয়। এটি DateTime.ToBinary() মেথডের বিপরীত কাজ করে।
সিনট্যাক্স (Syntax)
public static DateTime FromBinary(long value);
এখানে value হলো একটি ৬৪-বিট সাইনড ইন্টিজার যা Kind প্রোপার্টি (২-বিট) এবং Ticks প্রোপার্টি (৬২-বিট) এনকোড করে রাখে।
উদাহরণ ১: সিরিয়ালাইজেশন এবং ডিসিরিয়ালাইজেশন
using System;
public class Demo
{
public static void Main()
{
// একটি DateTime তৈরি
DateTime d1 = new DateTime(2019, 11, 10, 6, 20, 45);
// বাইনারি-এ রূপান্তর (Serialize)
long val = d1.ToBinary();
// বাইনারি থেকে পুনরুদ্ধার (Deserialize)
DateTime d2 = DateTime.FromBinary(val);
System.Console.WriteLine("Initial DateTime = {0:y} {0:dd} ", d1);
System.Console.WriteLine("\nNew DateTime = {0:y} {0:dd} ", d2);
}
}
আউটপুট
Initial DateTime = November 2019 10 New DateTime = November 2019 10
উদাহরণ ২: সরাসরি বাইনারি মান থেকে DateTime
using System;
public class Demo
{
public static void Main()
{
DateTime d1 = DateTime.FromBinary(100000);
System.Console.WriteLine("DateTime = {0:dd} {0:y}, {0:hh}:{0:mm}:{0:ss}", d1);
}
}
আউটপুট
DateTime = 01 January 0001, 12:00:00
কীভাবে কাজ করে (Internal Structure)
৬৪-বিট বাইনারি মানের গঠন:
- বিট ০-৬১ (৬২ বিট): Ticks প্রোপার্টি (১৬০১ সাল থেকে ১০০-ন্যানোসেকেন্ড ইন্টারভাল)
- বিট ৬২-৬৩ (২ বিট): Kind প্রোপার্টি (Unspecified=0, Utc=1, Local=2)
বাইনারি স্ট্রাকচার ভিজ্যুয়ালাইজেশন
| Kind (2 bits) | Ticks (62 bits) | | 63-62 | 61-0 |
ব্যবহারিক পরিস্থিতি: ডেটাবেস বা ফাইলে সংরক্ষণ
using System;
using System.IO;
public class BinaryDateTimeDemo
{
public static void Main()
{
DateTime now = DateTime.Now;
Console.WriteLine("Original: " + now);
// ফাইলে বাইনারি হিসেবে লেখা
long binary = now.ToBinary();
File.WriteAllText("datetime.bin", binary.ToString());
// ফাইল থেকে পড়ে পুনরুদ্ধার
string content = File.ReadAllText("datetime.bin");
long readBinary = long.Parse(content);
DateTime restored = DateTime.FromBinary(readBinary);
Console.WriteLine("Restored: " + restored);
Console.WriteLine("Match: " + (now == restored));
}
}
সতর্কতা: DateTimeKind.Local वाले ডেটা অন্য টাইমজোনের মেশিনে ডিসিরিয়ালাইজ করলে ভিন্ন লোকাল টাইম দেখাবে। UTC-তে সংরক্ষণ করা সুরক্ষিত।