একটি ডেভেলপারদের জন্য ইউনিক্স টাইমস্ট্যাম্প কনভার্টারের গাইড
ইউনিক্স টাইমস্ট্যাম্প কনভার্টারকে মাস্টার করুন। এপোক সময়কে মানব-পঠনযোগ্য তারিখে রূপান্তর করতে শিখুন, বিভিন্ন ভাষা পরিচালনা করুন, এবং সাধারণ ডেভেলপার pitfalls থেকে এড়িয়ে চলুন।

প্রস্তাবিত এক্সটেনশনগুলি
একটি ইউনিক্স টাইমস্ট্যাম্প রূপান্তরক হলো সেই সহজ কিন্তু অপরিহার্য টুলগুলোর একটি যা আপনি একজন ডেভেলপার বা ডেটা বিশ্লেষক হিসেবে সব সময়ই ব্যবহার করতে চাইবেন। এটি একটি সুবিধাজনক ইউটিলিটি যা একটি লম্বা, আপাততঃ এলোমেলো নম্বরকে আমরা যে তারিখ এবং সময় বুঝতে পারি তাতে রূপান্তরিত করে। সিস্টেম লগ খুঁজে বের করার সময়, API-এর সাথে কাজ করার সময়, বা ডাটাবেস থেকে তথ্য প্রশ্ন করার সময় যেখানে সময় এই অত্যন্ত কার্যকর ফরম্যাটে সংরক্ষিত থাকে—তখন এই রূপান্তরটি অত্যন্ত গুরুত্বপূর্ণ।
ইউনিক্স টাইমস্ট্যাম্প কী এবং এটি কেন গুরুত্বপূর্ণ

একটি ভালো কনভার্টার সত্যিই উপভোগ করার আগে, আপনাকে বুঝতে হবে সেই সংখ্যাটি আসলে কী। মূলত, ইউনিক্স টাইমস্ট্যাম্প হলো মাত্র সেকেন্ডের একটি ধারাবাহিক গণনা। এটি ১ জানুয়ারি, ১৯৭০ সালের ০০:০০:০০ ইউটিসি থেকে অতিবাহিত মোট সেকেন্ড সংখ্যাটিকে ট্র্যাক করে। সময়ের সেই নির্দিষ্ট মুহূর্তটি বিখ্যাতভাবে "ইউনিক্স ইপোক" নামে পরিচিত।
তাহলে এই পদ্ধতি কেন? সরলতা এবং দক্ষতার জন্য। সময়কে একটি একক পূর্ণসংখ্যা হিসাবে সংরক্ষণ করা "শুক্রবার, ১ জানুয়ারি, ২০২১ ১২:০০:০০ AM GMT" এর মতো একটি বিস্তারিত স্ট্রিংয়ের তুলনায় অনেক বেশি সংক্ষিপ্ত এবং কার্যকর। এটি কয়েকটি মূল ক্ষেত্রের জন্য এটিকে আদর্শ করে তোলে:
- ডাটাবেজ স্টোরেজ: টাইমস্ট্যাম্প ছোট, যা তাদের ইনডেক্স করতে এবং কোয়েরি করতে দ্রুত করে। এটি কার্যক্ষমতার জন্য একটি বিশাল জয়।
- API পেলোড: পূর্ণ তারিখ স্ট্রিং পাঠানোর চেয়ে একটি একক সংখ্যা আদান-প্রদান করা ব্যান্ডউইথের দিক থেকে অনেক বেশি হালকা, যা দ্রুত প্রতিক্রিয়া সময় নিশ্চিত করে।
- লগ ফাইল: যখন আপনি ডজন করে বিভিন্ন সিস্টেমের লগ পার্স করছেন, তখন একটি একক, ভাষা-স্বাধীন টাইমস্ট্যাম্প থাকা একটি লাইফসেভার।
- হিসাব: কোনো প্রক্রিয়া কত সময় নিয়েছিল জানতে চান? শুধু শেষ টাইমস্ট্যাম্প থেকে শুরুর টাইমস্ট্যাম্প বিয়োগ করুন। এটি সহজ পূর্ণসংখ্যা গণনা।
সেকেন্ড বনাম মিলিসেকেন্ড এবং তার চেয়ে বেশি
ক্লাসিক Unix টাইমস্ট্যাম্প হলো সেকেন্ডের প্রতিনিধিত্বকারী একটি ১০-অঙ্কের সংখ্যা। কিন্তু প্রযুক্তি বিকশিত হওয়ার সাথে সাথে, আরও বারীক সময়ের প্রয়োজনীয়তা বাড়ে। এখানেই আপনি বিভিন্ন দৈর্ঘ্যের টাইমস্ট্যাম্প দেখতে শুরু করবেন, এবং এটি একটি সাধারণ বাধা।
বাস্তব জগতে আপনি সাধারণত যা দেখবেন তার একটি দ্রুত বিভাজন এখানে দেওয়া হলো। একটি ভুল অন্যটি বলে মনে করা একটি ক্লাসিক "হাজারে ভুল" ত্রুটি যা কিছু খুব বিভ্রান্তিকর বাগ (bugs) তৈরি করতে পারে।
সাধারণ Unix টাইমস্ট্যাম্প ফরম্যাট এক নজরে
| একক | অঙ্ক | সাধারণ ব্যবহারের ক্ষেত্র | উদাহরণ মান (একই মুহূর্তের জন্য) |
|---|---|---|---|
| সেকেন্ড | 10 | বেশিরভাগ ব্যাকএন্ড সিস্টেম, ডাটাবেস এবং API-এর জন্য মানক। | 1609459200 |
| মিলিসেকেন্ড | 13 | ওয়েব প্রযুক্তিতে খুবই সাধারণ, বিশেষত JavaScript. | 1609459200000 |
| মাইক্রোসেকেন্ড | 16 | উচ্চ-সম্পর্কের ট্রেডিং বা বৈজ্ঞানিক কম্পিউটিংয়ে ব্যবহৃত হয়। | 1609459200000000 |
এই ফর্মাগুলো সঠিকভাবে বোঝা অত্যন্ত গুরুত্বপূর্ণ। যদি কোনো সরঞ্জাম সেকেন্ডের প্রত্যাশা করে এবং আপনি তাকে মিলিসেকেন্ড সরবরাহ করেন, তাহলে আপনি এমন তারিখ পাবেন যা ভবিষ্যতে হাজার হাজার বছর দূরে। এটি এমন একটি ভুল যেটি আমরা সকলেই কোনো না কোনো সময় করেছি!
বিখ্যাত ২০৩৮ সালের সমস্যা
ইউনিক্স টাইমস্ট্যাম্পের মনোরম সরলতা একটি টিকিং টাইম বোমাও তৈরি করেছিল: "২০৩৮ সালের সমস্যা।" পুরনো 32-bit সিস্টেমে, টাইমস্ট্যাম্পগুলি একটি স্বাক্ষরিত 32-বিট পূর্ণসংখ্যা হিসাবে সংরক্ষিত হত। সমস্যাটি হলো এই ধরনের পূর্ণসংখ্যার একটি সীমা রয়েছে—এটি এর চেয়ে বড় একটি সংখ্যা ধারণ করতে পারে না 2,147,483,647.
প্রতি ২০৩৮ সালের ১৯ই জানুয়ারি, ০৩:১৪:০৭ UTC, ইপক থেকে গণনা করা সেকেন্ড সংখ্যা সেই সীমাকে অতিক্রম করবে। যখন তা হবে, পূর্ণসংখ্যাটি "র্যাপ অ্যারাউন্ড" করে ঋণাত্মক সংখ্যায় পরিণত হবে। এটি ঝুঁকিপূর্ণ সিস্টেমগুলোকে তারিখটিকে আবার 1901বলে বুঝতে বাধ্য করবে, যা এখনও বিদ্যমান কোটি কোটি লিগেসি ডিভাইসকে ক্র্যাশ করতে পারে। ইউনিক্স ইপক এবং এর প্রভাব সম্পর্কে আরও অন্তর্দৃষ্টি পেতে আপনি StrongDM-এর বিশেষজ্ঞদের কাছ থেকে জানতে পারেন।
সৌভাগ্যবশত, এটি আমাদের অধিকাংশের জন্য দৈনিকভাবে চিন্তার বিষয় নয়। অধিকাংশ আধুনিক সিস্টেম ইতিমধ্যেই ৬৪-বিট সময় নির্ধারণের জন্য ইন্টিজার ব্যবহার করা হয়। ৬৪-বিট ইন্টিজার এতই বিশাল যে এটি আরও ২৯২ বিলিয়ন বছর পর্যন্ত ওভারফ্লো হবে না, যার ফলে সমস্যাটি স্থায়ীভাবে সমাধান হয়ে যায়।
তবুও, এটি কম্পিউটিং ইতিহাসের একটি চমৎকার অংশ এবং আপনি যদি কখনো পুরানো এম্বেডেড সিস্টেম বা লিগেসি কোডবেসের উপর কাজ করতে বাধ্য হন, তবে একটি সমালোচনামূলক জ্ঞান। এই মৌলিক বিষয়গুলি বোঝা যেকোনোই ইউনিক্স টাইমস্ট্যাম্প রূপান্তরকারীকে আপনার হাতে অনেক বেশি শক্তিশালী একটি হাতিয়ারে পরিণত করে।
আপনার ব্রাউজারেই রূপান্তর সহজ করে তুলুন
টার্মিনাল কমান্ড বা কোড স্নিপেট ব্যবহার করলেও হয়, কিন্তু সব সময়ই কাজ শেষ করার দ্রুততম পন্ত্র তা নাও হতে পারে। কখনো কখনো, আপনার শুধু একটি উত্তর দরকার এখনই, আপনার ফোকাস নষ্ট না করে বা উইন্ডু পরিবর্তন না করে। এখানেই একটি ভালো ব্রাউজার-ভিত্তিক হাতিয়ার তার প্রকৃত মূল্য প্রমাণ করে, বিশেষত একটি নিবেদিত ইউনিক্স টাইমস্ট্যাম্প রূপান্তরকারী যা সরাসরি আপনার ব্রাউজারেই থাকে।
এখানে প্রকৃত জাদুটি হলো 'ফ্লো'-তে থাকার ক্ষেত্রে। এটি কল্পনা করুন: আপনি আপনার ব্রাউজারের ডেভেলপার টুলসে একটি API রেসপন্সে খুঁড়ে দেখছেন এবং একটি টাইমস্ট্যাম্প দেখতে পাচ্ছেন। অন্য একটি ট্যাব খুলার বা টার্মিনাল শুরু করার বদলে, আপনি একটি দ্রুত কীবোর্ড শর্টকাট চাপুন, সংখ্যাটি পেস্ট করুন এবং তাৎক্ষণিকভাবে আপনার উত্তরটি পান। এই ধরনের নিরবচ্ছিন্ন ওয়ার্কফ্লোই আপনি ShiftShift Extensions-এর মতো হাতিয়ার ব্যবহার করে পান, যা Command Palette একটিতে অনেকগুলো সুবিধাজনক ইউটিলিটি প্যাক করে।
একটি কীবোর্ড শর্টকাট দিয়েই তাৎক্ষণিক উত্তর পান
সবকিছুই গতির ওপর নির্ভর করে। ShiftShift এর মতো কোনো সরঞ্জাম ব্যবহার করলে, Shift কী-এর দ্রুত দুইবার ট্যাপ করলে (অথবা Mac-এ Cmd+Shift+P) একটি কমান্ড বার খুলে যায়। শুধু "timestamp" টাইপ করা শুরু করলেই কনভার্টার চলে আসে। আপনার মানটি পেস্ট করুন এবং সাথে সাথে একটি মানুষের পড়ার উপযোগী তারিখ পেয়ে যাবেন।
এটি কেমন দেখায়—কমান্ড প্যালেট আপনার বর্তমান পেজের ওপরেই একটি টাইমস্ট্যাম্প রূপান্তর করতে প্রস্তুত এবং অপেক্ষমান।
সবচেয়ে ভালো দিক হলো, এটি আপনাকে বাধা না দিয়ে কীভাবে ইন্টিগ্রেট করে। কনভার্টার হলো একই ওভারলেতে পাওয়া অনেক সরঞ্জামের মধ্যে মাত্র একটি, তাই আপনাকে কখনোই যা করছেন তা ছেড়ে যেতে হবে না।
এই পদ্ধতিটি ডেভেলপার, টেস্টার এবং যে কেউ বাস্তবেই তাদের ব্রাউজারের মধ্যে বাস করেন তাদের জন্য একটি জীবনরক্ষাকারী। উপরন্তু, রূপান্তরটি সম্পূর্ণরূপে আপনার মেশিনেই ঘটে। লগ বা API প্রতিক্রিয়াগুলি থেকে সংবেদনশীল তথ্য কখনোই আপনার কম্পিউটার ছাড়ে না, যা গোপনীয়তার জন্য একটি বিশাল জয়।
একটি টাইমস্ট্যাম্প রূপান্তর করতে, একটি অগোছালো JSON ব্লব রিফরম্যাট করতে এবং তারপর একটি সময় পার্থক্য গণনা করতে পারা—সবকিছুই একই ইন্টারফেস থেকে—এটি একটি বিশাল সময় বাঁচায়। এটি একটি বাধার সৃষ্টিকারী, একাধিক সরঞ্জামের প্রক্রিয়াকে একটি একক, মসৃণ ক্রিয়ায় রূপান্তরিত করে।
শুধুমাত্র একটি কাজের পোনি নয়
ব্রাউজারভিত্তিক একটি দারুণ ইউটিলিটি সাধারণত কেবল একটি একক টুল নয়; এটি একটি পুরো টুলকিটের অংশ। আপনি প্রায়ই দেখবেন যে টাইমস্ট্যাম্প রূপান্তরক ব্যবহার করার সময় অন্যান্য ফাংশনগুলোর সাথেও আপনাকে এটি ব্যবহার করতে হবে।
উদাহরণস্বরূপ, আপনি এটিকে নিম্নলিখিতগুলোর সাথে জুটিয়ে ব্যবহার করতে পারেন:
- একটি JSON বা SQL ফরম্যাটার যাতে টাইমস্ট্যাম্প বের করার আগে কিছু কোড পরিষ্কার করা যায়।
- একটি অন্তর্নির্মিত ক্যালকুলেটর যেটি দিয়ে ইপোক মানগুলোর ওপর দ্রুত গাণিতিক কাজ করা যায়। (আপনি কীভাবে কাজ করে সেটি দেখতে ShiftShift ক্যালকুলেটর পৃষ্ঠায় একটি অনুরূপ টুল নিয়ে খেলতে পারেন)।
- একটি টেক্সট তুলনা টুল যাতে দুটি API রেসপন্স, টাইমস্ট্যাম্পসহ, মধ্যে পার্থক্যগুলো চেনা যায়।
এই সকল অপরিহার্য জিনিস এক জায়গায় পাওয়া একটি অনেক দ্রুত এবং আরও সংহত কাজের প্রক্রিয়া তৈরি করে। এটা শুধু সুবিধার ব্যাপার নয়—এটা এমন সব ছোট, পুনরাবৃত্তমূলক বাধাগুলোকে বাদ দেওয়ার ব্যাপার যা একদিনে জুড়ে জমা হয়ে আপনার উৎপাদনশীলতা নষ্ট করে।
কোডে বাস্তবসম্মত টাইমস্ট্যাম্প রূপান্তর
আপনি যদি একজন ডেভেলপার হন, তাহলে আপনি জানেন যে টাইমস্ট্যাম্পের সাথে কাজ করা কাজের একটি অংশ মাত্র। কিন্তু সত্যি বলা যাক, একটি ভাষা থেকে অন্য ভাষায় সিনট্যাক্সে সবসময়ই একই থাকে না। এই সেকশনটি আপনার জন্য একটি রেডি-রেফারেন্স শিট, যেখানে আপনি আপনার বাস্তব কাজের প্ল্যাটফর্মগুলির জন্য তাৎক্ষণিকভাবে ব্যবহার করার মতো কোড স্নিপেট রয়েছে। আর নয় পুরনো Stack Overflow থ্রেডে খুঁজে বের করার প্রয়োজন—শুধুমাত্র ব্যবহারিক উদাহরণ যা আপনাকে এগিয়ে যেতে সাহায্য করবে।

আপনি ওয়েব ফ্রন্টএন্ডে ডেটা নিয়ন্ত্রণ করছেন, একটি পাইথন স্ক্রিপ্ট লিখছেন, বা একটি ডাটাবেজে কোয়েরি করছেন—ইপক টাইম রূপান্তর করা একটি মৌলিক দক্ষতা। আমরা সবচেয়ে সাধারণ পরিস্থিতিগুলি দেখবো, যেমন একটি ইপক ইন্টিজারকে একটি পাঠযোগ্য স্ট্রিংয়ে রূপান্তর করা এবং তারপর সবকিছু উল্টো দিকে করা।
JavaScript-এ টাইমস্ট্যাম্প রূপান্তর
JavaScript's Date অবজেক্টটি এখানে আপনার প্রধান সরঞ্জাম, কিন্তু এর একটি বড় বৈশিষ্ট্য আছে যা সবসময় ডেভেলপারদের বিভ্রান্ত করে: এটি মিলিসেকেন্ড এ কাজ করে, সেকেন্ডে নয়। যখন আপনার ফ্রন্টএন্ড একটি স্ট্যান্ডার্ড ১০-ডিজিট, সেকেন্ড-ভিত্তিক টাইমস্ট্যাম্প ব্যবহারকারী ব্যাকএন্ডের সাথে যোগাযোগ করে, তখন এটি বাগের একটি ক্লাসিক উৎস।
একটি স্ট্যান্ডার্ড Unix টাইমস্ট্যাম্পকে (সেকেন্ডে) সঠিকভাবে একটি Date অবজেক্টে রূপান্তর করতে, আপনাকে এটিকে 1000.
// A standard 10-digit Unix timestamp (in seconds)
const unixTimestamp = 1672531200;
// Convert to milliseconds, then create a Date object
const dateObject = new Date(unixTimestamp * 1000);
// Format into a readable UTC string
// Output: Sun, 01 Jan 2023 00:00:00 GMT
console.log(dateObject.toUTCString());
বর্তমান টাইমস্ট্যাম্প দরকার? Date.now() এটিকে মিলিসেকেন্ডে দেয়। শুধু মনে রাখবেন যে একটি স্ট্যান্ডার্ড ১০-ডিজিট টাইমস্ট্যাম্প একটি API-তে ফেরত পাঠানোর আগে 1000 দিয়ে ভাগ করুন এবং পূর্ণসংখ্যায় রূপান্তর করুন।
পাইথন দিয়ে রূপান্তর পরিচালনা
ব্যাকএন্ডে, Python-এর datetime মডিউলটি একটি শক্তিশালী সরঞ্জাম। এটি অত্যন্ত নমনীয় এবং টাইমজোন-সচেতন রূপান্তরের জন্য চমৎকার সমর্থন রাখে, যা বিভিন্ন অঞ্চলে সময়কে সুনির্দিষ্টভাবে পরিচালনা করার প্রয়োজনীয় সেবাগুলির জন্য একে একটি নির্ভরযোগ্য বিকল্প করে তোলে।
datetime লাইব্রেরি ব্যবহার করে একটি টাইমস্ট্যাম্প রূপান্তর করার সরাসরি পদ্ধতিটি এখানে দেওয়া হলো:
import datetime
একটি আদর্শ ১০-অঙ্কের Unix টাইমস্ট্যাম্প
unix_timestamp = 1672531200
টাইমস্ট্যাম্পটিকে একটি datetime অবজেক্টে রূপান্তর করুন
datetime_obj = datetime.datetime.fromtimestamp(unix_timestamp)
এটিকে একটি পরিষ্কার, মানুষের পড়ার উপযোগী স্ট্রিংয়ে ফরম্যাট করুন
আউটপুট: 2023-01-01 00:00:00
print(datetime_obj.strftime('%Y-%m-%d %H:%M:%S'))
এই সরল পদ্ধতিটি আপনার Python অ্যাপ্লিকেশনে ইপোক সময় পরিচালনা করার একটি পরিষ্কার এবং নির্ভরযোগ্য উপায় প্রদান করে। এবং যদি আপনি JSON-এর মতো জটিল ডেটা স্ট্রাকচার নিয়ে কাজ করেন যাতে টাইমস্ট্যাম্প থাকে, তাহলে ডিবাগিংয়ের জন্য আমাদের JSON ফরম্যাটার ব্যবহার করার নির্দেশিকাটি আপনার কাজে লাগতে পারে।
SQL দিয়ে ডাটাবেস রূপান্তর
ডাটাবেসগুলো প্রায়ই সময়কে ইউনিক্স টাইমস্ট্যাম্প হিসেবে সংরক্ষণ করে কারণ এটি দক্ষ। ভালো খবর হলো, বেশিরভাগ SQL ডায়ালেক্টেই আপনার কোয়েরির মধ্যেই এই রূপান্তরগুলো পরিচালনা করার জন্য অন্তর্নির্মিত ফাংশন রয়েছে। অমূলক ইন্টিজার টাইমস্ট্যাম্প টেনে এনে আপনার অ্যাপ্লিকেশন কোডে রূপান্তর করার চেয়ে এটি অনেক বেশি কার্যকর।
ইউনিক্স টাইমস্ট্যাম্প প্রায় সর্বজনীন, 90% এরও বেশি প্রোগ্রামিং ভাষায় ব্যবহৃত হয়—JavaScript এর Date.now() থেকে শুরু করে Python এর time.time()—প্রতিদিন ট্রিলিয়ান অপারেশনকে শক্তি প্রদান করে। টাইমজোন ঠিক রাখা সমালোচনামূলকভাবে গুরুত্বপূর্ণ; একটি শক্তিশালী ইউনিক্স টাইমস্ট্যাম্প রূপান্তরকারী 400 এরও বেশি IANA জোন পরিচালনা করতে পারে, যা টাইমজোন স্পষ্টভাবে পরিচালনা না করা প্রায় 62% বিশ্বব্যাপী অ্যাপ্লিকেশনে ত্রুটি রোধ করতে সাহায্য করে। এই সরঞ্জামগুলোর বৈশ্বিক গ্রহণযোগ্যতা সম্পর্কে আরও বিস্তারিত তথ্য আপনি পেতে পারেন Fossa.
ডেভেলপারদের জন্য, মেশিন ছাড়া না গিয়েই SQL ফরম্যাট করা, টাইমস্ট্যাম্প রূপান্তর করা এবং ইপক পার্থক্য গণনা করার সক্ষমতা একটি বিশাল উৎপাদনশীলতার বিজয়। এই স্থানীয়-প্রথম পদ্ধতিটি আপনাকে GDPR এবং CCPA-র মতো আধুনিক ডাটা প্রাইভেসি স্ট্যান্ডার্ডের সাথেও সামঞ্জস্যপূর্ণ রাখে।
MySQL উদাহরণ
MySQL-এ, FROM_UNIXTIME() ফাংশনটি আপনি সবচেয়ে বেশি ব্যবহার করবেন। এটি একটি ইপোক ইন্টিজার নেয় এবং সেটিকে একটি আদর্শ DATETIME ফরম্যাটে সুন্দরভাবে রূপান্তর করে।
SELECT FROM_UNIXTIME(1672531200);
-- ফলাফল: '2023-01-01 00:00:00'
অন্যদিক থেকে—একটি তারিখ স্ট্রিং থেকে ইপোক টাইমস্ট্যাম্পে ফিরে যেতে—শুধু UNIX_TIMESTAMP().
SELECT UNIX_TIMESTAMP('2023-01-01 00:00:00');
-- ফলাফল: 1672531200
PostgreSQL উদাহরণ
PostgreSQL একটু ভিন্ন কিন্তু সমানভাবে শক্তিশালী একটি ফাংশন ব্যবহার করে: to_timestamp()। এই ফাংশনটি সরাসরি একটি Unix টাইমস্ট্যাম্পকে একটি TIMESTAMP WITH TIME ZONE মানে রূপান্তর করে।
SELECT to_timestamp(1672531200);
-- ফলাফল: 2023-01-01 00:00:00+00
কারণ এটি আউট অফ দ্য বক্সেই টাইমজোন-অ্যাওয়্যার, বৈশ্বিক দর্শকদের সেবা প্রদানকারী অ্যাপ্লিকেশনগুলির জন্য সময়ের নির্ভুলতা যেখানে অপরিবর্তনীয়, সেখানে এটি একটি খুবই শক্তিশালী বিকল্প।
টার্মিনালে টাইমস্ট্যাম্প রূপান্তরে দক্ষতা অর্জন
আপনি যদি কমান্ড লাইনে থাকেন, তাহলে একটি দ্রুত টাইমস্ট্যাম্প রূপান্তরের জন্য ব্রাউজার বা GUI-তে যাওয়া আপনার কাজের ধারা ধ্বংস করে দিতে পারে। এটি কেবল আপনার মনোযোগ ভাঙে। ভালো খবর হলো, আপনাকে এমন কিছু করার প্রয়োজন নেই; লিনাক্স এবং macOS উভয়েরই শক্তিশালী, নেটিভ টুল রয়েছে যা টার্মিনাল ছাড়াই এই রূপান্তরগুলি পরিচালনা করতে পারে।
এর জন্য সবচেয়ে জনপ্রিয় ইউটিলিটি হলো সাধারণ date কমান্ড। প্রায় প্রতিটি ইউনিক্স-সদৃশ সিস্টেমেই এটি রয়েছে, তবে একটি সমস্যা আছে: এটিকে একটি ইউনিক্স টাইমস্ট্যাম্প রূপান্তরক হিসাবে ব্যবহার করার সিনট্যাক্স লিনাক্স (GNU) এবং macOS (BSD)-এর মধ্যে পৃথক। সঠিকভাবে প্রতিবার কাজটি করার চাবি হলো পার্থক্যটি জানা।
লিনাক্সে টাইমস্ট্যাম্প রূপান্তর
লিনাক্সে, সিনট্যাক্সটি পরিষ্কার এবং মনে রাখা সহজ। আপনি তারিখ নির্দিষ্ট করতে -d ফ্ল্যাগ ব্যবহার করেন, তবে আপনি যেন একটি ইপোক টাইমস্ট্যাম্প প্রদান করছেন সেটি জানাতে হবে, এবং এর জন্য আপনাকে তাকে @ প্রতীকের সাথে আগে থেকে যুক্ত করতে হবে।
ধরুন, আপনি লগ খুঁজছেন এবং এই টাইমস্ট্যাম্প 1704067200 দেখতে পাচ্ছেন। এটি আসলে কী মানে, তা দেখতে আপনি এটি চালাবেন:
date -d @1704067200
তাৎক্ষণিকভাবেই, আপনি একটি সাধারন মানুষের পড়ার যোগ্য তারিখ পাবেন, যেমন Mon Jan 1 00:00:00 UTC 2024। আপনি নিজের পছন্দের ফরম্যাট দিয়ে এই আউটপুট পরিষ্কারও করতে পারেন।
date -d @1704067200 +"%Y-%m-%d %H:%M:%S"
আউটপুট: 2024-01-01 00:00:00
প্রফেশনাল টিপস: অন্য কমান্ডগুলোকে এতে পাইপ করে দিতে শুরু করলে এই কমান্ডটি সত্যিই শক্তিশালী হয়ে ওঠে। আপনি একটি বিশাল লগ ফাইল
grepথেকে একটি টাইমস্ট্যাম্প বের করেdateসরাসরি সরবরাহ করতে পারেন তাৎক্ষণিক রূপান্তরের জন্য। এটি একটি ধাপে ধাপে ডিবাগিং কাজকে একটি একক, সুশৃঙ্খল এক-লাইনারে পরিণত করে।
macOS-এ রূপান্তর পরিচালনা
এখন, যদি আপনি সেই একই Linux কমান্ডটি Mac-এ চালান, তবে এটি একটি ত্রুটি দেখাবে। macOS যে সংস্করণের date BSD সংস্করণ ব্যবহার করে, সেটির ক্ষেত্রে -r ফ্ল্যাগের পরিবর্তে @ প্রিফিক্সের প্রয়োজন হয় না।
একটি Mac-এ একই টাইমস্ট্যাম্পটি কীভাবে রূপান্তর করবেন তার পদ্ধতিটি এখানে দেওয়া হলো:
date -r 1704067200
Linux সংস্করণের মতোই, আপনি নির্দিষ্ট আউটপুট পেতে ফরম্যাটিং অপশন যোগ করতে পারেন।
date -r 1704067200 +"%Y-%m-%d %T %Z"
আউটপুট: 2024-01-01 00:00:00 UTC
এই ছোট পার্থক্যটি Linux এবং macOS-এর মধ্যে বারবার যাতায়াতকারীদের জন্য একটি চিরচেনা বাধা। উভয় সংস্করণ মুখস্থ করে ফেললে ভবিষ্যতে অনেক ঝামেলা এড়ানো যাবে।
যখন এই কমান্ডগুলো আপনার কাছে পরিচিত হয়ে যায়, তখন আপনি টাইমস্ট্যাম্প রূপান্তরগুলো সরাসরি আপনার শেল স্ক্রিপ্ট এবং লগ বিশ্লেষণে ব্যবহার করতে পারবেন। এটি একটি ছোট দক্ষতা হলেও, এটি ক্রমবর্ধমান উত্পাদনশীলতার সুবিধায় পরিণত হয়, আপনাকে কাজের ক্ষেত্রে মনোনিবেশিত রাখে।
সাধারণ টাইমস্ট্যাম্প সমস্যা এবং সেগুলো এড়িয়ে যাওয়ার উপায়
ইউনিক্স টাইমস্ট্যাম্পের সাথে কাজ করতে দেখতে সহজ মনে হতে পারে, কিন্তু কিছু ক্লাসিক ভুল সত্যিই মাথাধরার বাগ তৈরি করতে পারে। এই সমস্যাগুলো প্রকৃত ত্রুটি ঘটার স্থান থেকে অনেক দূরে দেখা দেওয়ার একটি রূঢ় অভ্যাস রয়েছে, যা ত্রুটি নিরীক্ষাকে সত্যিই একটি মাথাব্যথার সমস্যায় পরিণত করে। এই অংশটিকে আপনার মাঠ গাইড হিসাবে বিবেচনা করুন, যা আমি বছরের পর বছর দেখেছি সবচেয়ে সাধারণ টাইমস্ট্যাম্প ফাঁদগুলো চিহ্নিত করতে এবং এগুলো এড়িয়ে চলতে সাহায্য করবে।
সেকেন্ড বনাম মিলিসেকেন্ডের মিশ্রণ
সবচেয়ে ঘন ঘন হওয়া ভুলটি হলো সেকেন্ডকে মিলিসেকেন্ডের সাথে বিভ্রান্ত করা। একটি মানক ইউনিক্স টাইমস্ট্যাম্প হলো ইপোক থেকে অতিবাহিত সেকেন্ডের সংখ্যা নির্দেশকারী একটি ১০-সংখ্যার পূর্ণসংখ্যা। কিন্তু অনেক সিস্টেম, বিশেষত JavaScript এর জগতে, মিলিসেকেন্ডের জন্য একটি ১৩-সংখ্যার টাইমস্ট্যাম্প ব্যবহার করে। যখন একটি ফ্রন্ট-এন্ড অ্যাপ মিলিসেকেন্ডের মান সেকেন্ড আশা করা ব্যাকএন্ডে পাস করে, তখন সবকিছু বিগড়ে যায়।
একটি unix timestamp convertor এর কাছে, সেই ১৩-সংখ্যার সংখ্যাটি ভবিষ্যতের হাজার হাজার বছরের একটি তারিখের মতো মনে হতে পারে। এটি চুপচাপে ডেটা যাচাইকরণ, সময়সূচী লজিক এবং আপনি যে কোনো ঐতিহাসিক রেকর্ড রাখার চেষ্টা করছেন সেগুলোকে নষ্ট করতে পারে। এটি সেই ধরনের সূক্ষ্ম ডেটা দূষণ, যা আপনি সম্ভবত সপ্তাহের পর সপ্তাহও লক্ষ না করতে পারেন।
টাইমজোনের ফাঁদ
অভিজ্ঞ ডেভেলপারদেরও হাতিয়ে যায় এমন আরেকটি সমস্যা হলো টাইমজোন হ্যান্ডলিং। সংজ্ঞানুসারে, একটি Unix টাইমস্ট্যাম্প সবসময় সমন্বিত সার্বজনীন সময় (UTC) এ থাকে। এটি অবস্থান সম্পূর্ণ নির্ভরশীল নয় এমন একটি একক, সার্বজনীন মুহূর্তকে নির্দেশ করে। আপনি যদি এটি ভুলে গিয়ে ধরে নেন যে টাইমস্ট্যাম্প একজন ব্যবহারকারীর স্থানীয় সময়কে প্রতিফলিত করে, তবেই সমস্যাটি শুরু হয়।
এই ভুল সাধারণত ঘটে যখন আপনি একটি টাইমস্ট্যাম্পকে টাইমজোন নির্দিষ্ট না করেই একটি পড়ার যোগ্য তারিখে রূপান্তরিত করেন। আপনার সিস্টেম প্রায়ই সার্ভারের স্থানীয় সময়কে ডিফল্ট হিসেবে নেয়, যার ফলে গণ্ডগোল তৈরি হয়। নিউইয়র্কের একজন ব্যবহারকারী লন্ডনের কারো জন্য নির্ধারিত সময়টি দেখতে পারতেন, তবে সেটি কয়েক ঘন্টা ভুল হয়।
সোনালী নিয়মটি সরল: আপনার ব্যাকএন্ডে সবসময় টাইমস্ট্যাম্পকে UTC হিসেবে বিবেচনা করুন। সেগুলোকে UTC হিসেবে সংরক্ষণ করুন, UTC হিসেবে প্রক্রিয়া করুন এবং কেবলমাত্র ফ্রন্ট-এন্ডে ডিসপ্লে করার মুহূর্তেই ব্যবহারকারীর স্থানীয় সময়ে রূপান্তরিত করুন।
সাধারণ টাইমস্ট্যাম্প রূপান্তর ত্রুটির সমস্যা সমাধান
যখন কিছু ভুল হয়, তখন লক্ষণগুলি বিভ্রান্তিকর হতে পারে। সবচেয়ে সাধারণ সমস্যাগুলো দ্রুত সনাক্ত করতে এবং সমাধান করতে সাহায্য করার জন্য আমার অভিজ্ঞতা থেকে একটি দ্রুত রেফারেন্স টেবিল তৈরি করেছি।
| লক্ষণ | সম্ভাব্য কারণ | সমাধান |
|---|---|---|
| তারিখটি বছর ৫২৩৬১ বা অন্য কোনো দূরবর্তী ভবিষ্যতে রয়েছে। | মিলিসেকেন্ড বনাম সেকেন্ড। আপনি একটি ১৩-সংখ্যার মিলিসেকেন্ড টাইমস্ট্যাম্প পাস করছেন যেটি একটি ১০-সংখ্যার সেকেন্ড টাইমস্ট্যাম্পের জন্য প্রত্যাশিত। | প্রক্রিয়াকরণের আগে টাইমস্ট্যাম্পটিকে ১০০০ দিয়ে ভাগ করুন। ইনকামিং টাইমস্ট্যাম্পের সংখ্যার সংখ্যা সবসময় যাচাই করুন। |
| সময় কয়েক ঘণ্টা ভুল কিন্তু তারিখটি সঠিক। | টাইমজোন ভুলভাবে হ্যান্ডেল করা। টাইমস্ট্যাম্পটি ব্যবহারকারীর বা UTC-এর পরিবর্তে সার্ভারের স্থানীয় সময় ব্যবহার করে রূপান্তরিত হয়েছিল। | নিশ্চিত করুন যে সমস্ত রূপান্তর সুনির্দিষ্টভাবে লক্ষ্য টাইমজোন নির্দিষ্ট করে। শুধুমাত্র ক্লায়েন্ট-সাইডে স্থানীয় সময়ে রূপান্তর করুন। |
| তারিখটি ১ জানুয়ারি, ১৯৭০-তে আটকে আছে। | অবৈধ বা শূন্য টাইমস্ট্যাম্প। টাইমস্ট্যাম্প মানটি সম্ভবত 0, null, বা undefined. |
রূপান্তর করার চেষ্টা করার আগে একটি চেক যোগ করুন যাতে নিশ্চিত হয় টাইমস্ট্যাম্পটি একটি বৈধ ধনাত্মক পূর্ণসংখ্যা। একটি ফলব্যাক মান প্রদান করুন। |
"Invalid Date" বা NaN ত্রুটি পাচ্ছেন। |
ভুল ডেটা টাইপ। একটি নম্বর প্রয়োজন হওয়া সত্ত্বেও টাইমস্ট্যাম্পকে একটি স্ট্রিং বা অন্যান্য অ-সংখ্যামূলক টাইপ হিসাবে বিবেচনা করা হচ্ছে। | তারিখ ফাংশনে ব্যবহার করার আগে টাইমস্ট্যাম্পকে স্পষ্টভাবে একটি ইন্টিজারে পার্স করুন (parseInt() JS-তে, int() Python-এ)। |
মনে রাখবেন, ইনপুটের একটি দ্রুত চেক আপনাকে পরবর্তী সময়ে ঘণ্টার পর ঘণ্টা ডিবাগিং থেকে রক্ষা করতে পারে।
স্ট্যান্ডার্ড ফরম্যাটের মাধ্যমে অস্পষ্টতা এড়িয়ে চলুন
সিস্টেমের মধ্যে ডেটা পাস করার সময় কাঁচা ইন্টিজার টাইমস্ট্যাম্পের ওপর নির্ভর করা বিভ্রান্তির কারণ হতে পারে। এটিই কেন ISO 8601 (2022-05-17T12:00:00Z) এর মতো একটি সার্বজনীন স্ট্রিং ফরম্যাটে স্ট্যান্ডার্ডাইজ করাটি এত ভালো একটি প্রতিরক্ষামূলক পদক্ষেপ। ইউনিক্স টাইমস্ট্যাম্প (যেমন, 1652905200) এর মতো স্পষ্ট, স্ব-নথিভুক্ত ফরম্যাটে রূপান্তর করা অনুমানিক 37% ক্রস-টাইমজোন API কলের ত্রুটি প্রতিরোধ করতে সাহায্য করে।
বিবেচনা করুন যে 72%টি Fortune 500 কোম্পানি লগ বিশ্লেষণের জন্য Unix timestamps ব্যবহার করে, যেখানে একটি সামান্য ভুল ঘণ্টায় $10,000-এর বেশি ডাউনটাইম ক্ষতি হতে পারে, তাই নির্ভুলতা সর্বাগ্রে। বিভিন্ন শিল্পে epoch time কীভাবে ব্যবহৃত হয় সে সম্পর্কে আপনি EpochConverter.
থেকে আরও পড়তে পারেন।ডাটাবেস পরিচালনা করার জন্য, ধারাবাহিক টাইমস্ট্যাম্প হ্যান্ডলিং একইভাবে সমান গুরুত্বপূর্ণ। যদি আপনি আপনার ডাটাবেসে বিভিন্ন টাইমস্ট্যাম্প ফরম্যাট নিয়ে ঘন ঘন সমস্যায় পড়েন, তাহলে একটি শক্তিশালী SQL formatterব্যবহার করার আমাদের গাইড আপনার কোয়েরিগুলোকে পরিষ্কার এবং পূর্বাভাবে প্রত্যাশিত রাখতে সাহায্য করতে পারে।
এই ডিসিশন ট্রি আপনার অপারেটিং সিস্টেমের জন্য সঠিক কমান্ড বাছাই করতে সাহায্য করে, দ্রুত রূপান্তরের প্রয়োজনে সিনট্যাক্স ত্রুটি প্রতিরোধ করে।

উপরের ফ্লোচার্টটি স্পষ্টভাবে দেখাচ্ছে date লিনাক্সে (-d @...) এবং macOS-এ (-r ...) কমান্ডের মধ্যে গুরুত্বপূর্ণ সিনট্যাক্স পার্থক্য—বিভিন্ন এনভায়রনমেন্টে কাজ করার সময় ডেভেলপারদের জন্য একটি সাধারণ সমস্যা।
আপনার কোডকে সুরক্ষিত করতে, সর্বদা ইনকামিং টাইমস্ট্যাম্পের দৈর্ঘ্য যাচাই করার জন্য চেক প্রয়োগ করুন। একটি সাধারণ ফাংশন যা 10-ডিজিট (সেকেন্ড) বা 13-ডিজিট (মিলিসেকেন্ড) মানের জন্য চেক করে, এই ত্রুটিগুলি আপনার অ্যাপ্লিকেশনের লজিকে ক্ষতিগ্রস্ত করার আগেই ধরতে পারে।
Unix টাইমস্ট্যাম্প সম্পর্কে সাধারণ প্রশ্নাবলী
Unix টাইমস্ট্যাম্প সম্পর্কে জানতে শুরু করলে, কয়েকটি ব্যবহারিক প্রশ্ন প্রায়ই উঠে আসে। আমি দেখেছি এই বিষয়গুলি সকল স্তরের ডেভেলপারদের জন্য সমস্যা তৈরি করে, তাই আপনার দৈনন্দিন কাজের সময় সবচেয়ে সাধারণ প্রশ্নগুলির উপর আমরা পরিষ্কার করে দিই।
কেন এত সংখ্যক API ISO 8601 স্ট্রিংয়ের পরিবর্তে টাইমস্ট্যাম্প ব্যবহার করে?
এটি মূলত কাঁচা দক্ষতার ওপর নির্ভর করে। ইউনিক্স টাইমস্ট্যাম্প কেবলমাত্র একটি সংখ্যা, যা ইতিহাসকে '2023-10-27T10:00:00Z' এর মতো একটি স্ট্রিংয়ের তুলনায় অবিশ্বাস্যভাবে সংক্ষিপ্ত করে। এই ছোট আয়তনের ফলে ওয়্যারের ওপর প্রেরণ করার জন্য কম ডেটা প্রয়োজন হয়, যা ব্যান্ডউইথ সাশ্রয় করে এবং API প্রতিক্রিয়াগুলোকে দ্রুত করতে পারে।
এগুলো সম্পূর্ণভাবেই ভাষানিরপেক্ষ। কোনো অস্পষ্টতা নেই, কোনো পার্সিং সমস্যা নেই, এবং কোনো আঞ্চলিক ফরম্যাটিং নিয়ে চিন্তা করার প্রয়োজন নেই। একটি মেশিনের জন্য, সংখ্যা গণনা করা সবসময় স্ট্রিং পার্স করার চেয়ে দ্রুত হয়, তাই যেকোনো তারিখ গণনা—যেমন দুটি ঘটনার মধ্যে সময় নির্ণয় করা—কম্পিউটেশনালভাবে সাশ্রয়ী। হার্ফোরম্যান্স সিস্টেমের জন্য, এই সরলতা একটি বিশাল সুবিধা।
টাইমজোন সঠিকভাবে কীভাবে ম্যানেজ করবেন?
এটিই প্রধান বিষয়। এখানে সোনালী নিয়মটি আছে: একটি Unix টাইমস্ট্যাম্প সবসময়, সবসময় UTC-এ থাকে। এটির মধ্যে কোনো টাইমজোনের ধারণা এমবেড করা থাকে না। এটি শুধুমাত্র ইপক থেকে সেকেন্ডের একটি অপরিষ্কার গণনা।
টাইমজোন তখনই গুরুত্বপূর্ণ হয় যখন আপনাকে সেই টাইমস্ট্যাম্পটি একজন মানুষকে দেখাতে হয়।
আমার পরামর্শ কী? ব্যাকএন্ডের সবকিছুর জন্য UTC-তে আটকে থাকুন। আপনার ডাটাবেসে এটি একটি UTC টাইমস্ট্যাম্প হিসাবে সংরক্ষণ করুন, আপনার API-র মধ্য দিয়ে UTC-তে পাস করুন এবং আপনার সার্ভার-সাইড লজিকের সমস্ত কাজ UTC-তেই করুন। একমাত্র সময় যখন আপনাকে এটিকে একটি স্থানীয় টাইমজোনে রূপান্তরিত করতে হবে সেটি হলো ফ্রন্ট-এন্ডে, ঠিক ব্যবহারকারীকে দেখানোর আগে। এই একটি অনুশীলনই আপনাকে টাইমজোন এবং ডেলাইট সেভিং সংক্রান্ত অসংখ্য বাগ থেকে রক্ষা করবে।
আমাকি কি 2038 সমস্যা নিয়ে এখনও চিন্তা করতে হবে?
বেশিরভাগ নতুন প্রজেক্টের জন্য, সম্ভবত নয়। "২০৩৮ সালের সমস্যাটি" পুরানো সিস্টেমগুলির একটি ফলতাশেষ, যেগুলি টাইমস্ট্যাম্প সংরক্ষণ করতে 32-বিট সাইনড ইন্টিজার ব্যবহার করত। যখন সেই সংখ্যাটি অত্যধিক বড় হয়ে যায়, তখন এটি ঘুরে গিয়ে ঋণাত্মক হয়ে পড়ে, তারিখগুলিকে ১৯০১ সালে ফিরিয়ে দেয়।
সৌভাগ্যবশত, প্রায় সকল আধুনিক সিস্টেম—অপারেটিং সিস্টেম থেকে ডেটাবেস—দীর্ঘ সময় ধরে 64-বিট ইন্টিজার-এ রূপান্তরিত হয়েছে। এটি কার্যত মসলাটি এত দূরে সরিয়ে দেয় (আসলে বিলিয়ন বছর) যে এটি আর আমাদের জন্য একটি ব্যবহারিক উদ্বেগের বিষয় নয়।
তবুও, যদি আপনি কোনো লিগেসি সিস্টেম বজায় রাখছেন বা এম্বেডেড হার্ডওয়্যার (IoT ডিভাইসগুলির কথা মনে করুন) নিয়ে কাজ করছেন, এটি নিশ্চিতভাবেই জানা উচিত। সর্বদা জেনে রাখুন আপনি কোন ধরনের আর্কিটেকচারের উপর কাজ করছেন।
Excel বা Google Sheets-এ কীভাবে দ্রুত একটি টাইমস্ট্যাম্প রূপান্তর করবেন?
এর জন্য আপনাকে আপনার ডেটাকে আলাদা ইউনিক্স টাইমস্ট্যাম্প কনভার্টারে টেনে আনার প্রয়োজন নেই। একটি সাধারণ সূত্রই এই কাজ সম্পন্ন করতে পারবে। ধরুন আপনার টাইমস্ট্যাম্পটি A1 ঘরে আছে:
- সেকেন্ডে টাইমস্ট্যাম্পের জন্য (১০ ডিজিট):
=A1 / 86400 + DATE(1970,1,1) - মিলিসেকেন্ডে সময়মোজামার জন্য (১৩ ডিজিট):
=A1 / 86400000 + DATE(1970,1,1)
এই ফর্মুলাটি বসিয়ে দিন, তারপর ঘরটিকে একটি "তারিখ" বা "তারিখ ও সময়" হিসেবে ফরম্যাট করুন। যখন আপনি দ্রুত ডেটা রপ্তানি বিশ্লেষণ করছেন এবং আপনার প্রবাহ ভাঙতে চান না, তখন এটি একটি জীবন রক্ষাকারী।
সহজ কাজের জন্য আপনার সম্পাদক, কমান্ড লাইন এবং ডজন ডজন ব্রাউজার ট্যাবের মধ্যে অবিরাম পরিবর্তন করে করে ক্লান্ত? ShiftShift Extensions স্যুটটি আপনার ব্রাউজারেই একটি শক্তিশালী Unix টাইমস্ট্যাম্প কনভার্টার, JSON ফরম্যাটার, SQL সৌন্দর্যকারী এবং আরও অনেক কিছু একত্র করে দেয়। আপনার যা কিছু দরকার, তা শুধু একটি কীবোর্ড শর্টকাট দূরে।
আজই ShiftShift Extensions পান এবং আপনার কাজের প্রবাহকে সরল করুন https://shiftshift.app