ব্লগে ফিরে যান

একটি ডেভেলপারদের জন্য ইউনিক্স টাইমস্ট্যাম্প কনভার্টারের গাইড

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

একটি ডেভেলপারদের জন্য ইউনিক্স টাইমস্ট্যাম্প কনভার্টারের গাইড

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

ইউনিক্স টাইমস্ট্যাম্প কী এবং এটি কেন গুরুত্বপূর্ণ

একটি ডিজিটাল কাউন্টার যা ইউনিক্স টাইমস্ট্যাম্প 1609459200 প্রদর্শন করছে, সেকেন্ড, মিলিসেকেন্ড এবং মাইক্রোসেকেন্ডের বিস্তারিত তথ্যের সাথে।

আপনি সত্যিই একটি ভাল কনভার্টারকে প্রশংসা করতে পারার আগে, আপনাকে বুঝতে হবে যে সেই সংখ্যা আসলে কী। এর মূল ভিত্তিতে, একটি ইউনিক্স টাইমস্ট্যাম্প হল সেকেন্ডের একটি চলমান গণনা। এটি ০১ জানুয়ারী ১৯৭০ তারিখে ০০:০০:০০ UTC থেকে পেরিয়ে যাওয়া মোট সেকেন্ডের সংখ্যা ট্র্যাক করে। সেই নির্দিষ্ট মুহূর্তটিকে বিখ্যাতভাবে "ইউনিক্স এপোক" বলা হয়।

তাহলে কেন এই পদ্ধতি? সরলতা এবং কার্যকারিতা। সময়কে একটি একক পূর্ণসংখ্যা হিসেবে সংরক্ষণ করা একটি বিস্তারিত স্ট্রিং যেমন "শুক্রবার, ১ জানুয়ারী, ২০২১ ১২:০০:০০ AM GMT" এর চেয়ে অনেক বেশি সংক্ষিপ্ত এবং কার্যকর। এটি কয়েকটি মূল ক্ষেত্রের জন্য নিখুঁত:

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

সেকেন্ড বনাম মিলিসেকেন্ড এবং তার বাইরেও

ক্লাসিক ইউনিক্স টাইমস্ট্যাম্প হল একটি ১০-সংখ্যার সংখ্যা যা সেকেন্ডকে উপস্থাপন করে। কিন্তু প্রযুক্তি বিকশিত হওয়ার সাথে সাথে, আরও সূক্ষ্ম সময়keeping এর প্রয়োজন বেড়েছে। এখানেই আপনি বিভিন্ন দৈর্ঘ্যের টাইমস্ট্যাম্প দেখতে শুরু করবেন, এবং এটি একটি সাধারণ বাধা।

এখানে একটি দ্রুত বিশ্লেষণ রয়েছে যা আপনি সাধারণত প্রকৃতিতে দেখতে পাবেন। একটিকে অন্যটির সাথে ভুল বোঝা একটি ক্লাসিক "এক হাজার দ্বারা ভুল" ত্রুটি যা কিছু খুব বিভ্রান্তিকর বাগের দিকে নিয়ে যেতে পারে।

সাধারণ ইউনিক্স টাইমস্ট্যাম্প ফরম্যাটগুলি এক নজরে

ইউনিট সংখ্যা সাধারণ ব্যবহার একই মুহূর্তের উদাহরণ মান
সেকেন্ড ১০ বেশিরভাগ ব্যাকএন্ড সিস্টেম, ডেটাবেস এবং API-এর জন্য মানক। 1609459200
মিলিসেকেন্ড ১৩ ওয়েব প্রযুক্তিতে খুব সাধারণ, বিশেষ করে জাভাস্ক্রিপ্ট-এ। 1609459200000
মাইক্রোসেকেন্ড ১৬ উচ্চ-ফ্রিকোয়েন্সি ট্রেডিং বা বৈজ্ঞানিক গণনার জন্য ব্যবহৃত। 1609459200000000

এই ফরম্যাটগুলি সঠিকভাবে বোঝা অত্যন্ত গুরুত্বপূর্ণ। যদি একটি টুল সেকেন্ড আশা করে এবং আপনি এটি মিলিসেকেন্ড দেন, তাহলে আপনি একটি তারিখ পাবেন যা হাজার হাজার বছর ভবিষ্যতে। এটি একটি ভুল যা আমরা সকলেই এক সময়ে করেছি!

প্রসিদ্ধ ২০৩৮ সালের সমস্যা

ইউনিক্স টাইমস্ট্যাম্পের মার্জিত সরলতা একটি টিকটিক করা সময় বোমাও তৈরি করেছে: "২০৩৮ সালের সমস্যা।" পুরানো ৩২-বিট সিস্টেমগুলিতে, টাইমস্ট্যাম্পগুলি একটি স্বাক্ষরিত ৩২-বিট পূর্ণসংখ্যা হিসেবে সংরক্ষিত হয়। সমস্যাটি হল এই ধরনের পূর্ণসংখ্যার একটি সিলিং রয়েছে—এটি ২,১৪৭,৪৮৩,৬৪৭ এর চেয়ে বড় সংখ্যা ধারণ করতে পারে না।

১৯৩৮ সালের ১৯ জানুয়ারী, ০৩:১৪:০৭ UTC এ, এপোক থেকে সেকেন্ডের সংখ্যা সেই সীমা অতিক্রম করবে। যখন এটি ঘটে, পূর্ণসংখ্যাটি "র‍্যাপ অ্যারাউন্ড" হবে এবং একটি নেতিবাচক সংখ্যা হয়ে যাবে। এটি দুর্বল সিস্টেমগুলিকে তারিখটি ১৯০১ সালে ফিরে যাওয়া হিসেবে ব্যাখ্যা করতে বাধ্য করবে, যা এখনও সেখানে থাকা বিলিয়ন বিলিয়ন পুরানো ডিভাইসগুলিকে ক্র্যাশ করতে পারে। আপনি ইউনিক্স এপোক এবং এর প্রভাব সম্পর্কে আরও অন্তর্দৃষ্টি পেতে পারেন StrongDM-এর বিশেষজ্ঞদের কাছ থেকে।

ভাগ্যক্রমে, এটি এমন কিছু নয় যা আমাদের অধিকাংশকে প্রতিদিন উদ্বেগ করতে হবে। আধুনিক সিস্টেমগুলির বিশাল সংখ্যাগরিষ্ঠ ৬৪-বিট পূর্ণসংখ্যায় সময়keeping-এ চলে গেছে। একটি ৬৪-বিট পূর্ণসংখ্যা এত বিশাল যে এটি আর ২৯২ বিলিয়ন বছর সময়ের জন্য ওভারফ্লো হবে না, কার্যত সমস্যাটি চিরতরে সমাধান করে।

তবুও, এটি একটি অসাধারণ কম্পিউটিং ইতিহাসের অংশ এবং একটি গুরুত্বপূর্ণ জ্ঞান যদি আপনি কখনও পুরানো এম্বেডেড সিস্টেম বা লেগেসি কোডবেসে কাজ করতে যান। এই মৌলিক বিষয়গুলি বোঝা যে কোনও ইউনিক্স টাইমস্ট্যাম্প কনভার্টারকে আপনার হাতে একটি অনেক শক্তিশালী টুল করে তোলে।

আপনার ব্রাউজারে রূপান্তরকে সহজ করা

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

এখানে আসল ম্যাজিক হল প্রবাহে থাকা। এটি কল্পনা করুন: আপনি আপনার ব্রাউজারের ডেভেলপার টুলসে একটি API প্রতিক্রিয়া খুঁজছেন এবং একটি টাইমস্ট্যাম্প দেখতে পাচ্ছেন।

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

কীবোর্ড শর্টকাট দিয়ে তাৎক্ষণিক উত্তর পান

এটি সবই গতির উপর নির্ভর করে। ShiftShift-এর মতো একটি টুল দিয়ে, Shift কী-এর একটি দ্রুত ডাবল-ট্যাপ (অথবা Mac-এ Cmd+Shift+P) একটি কমান্ড বার খুলে দেয়। শুধু "timestamp" টাইপ করতে শুরু করুন, এবং কনভার্টারটি উপস্থিত হয়। আপনার মান পেস্ট করুন, এবং আপনি সেখানেই একটি মানব-পঠনযোগ্য তারিখ পেয়ে যাবেন।

এটি কেমন দেখায় তা এখানে—কমান্ড প্যালেট আপনার বর্তমান পৃষ্ঠার উপরে একটি টাইমস্ট্যাম্প কনভার্ট করার জন্য প্রস্তুত এবং অপেক্ষা করছে।

সেরা অংশ হল এটি আপনার পথে না এসে কীভাবে একীভূত হয়। কনভার্টারটি একই ওভারলেতে উপলব্ধ অনেক টুলের মধ্যে একটি, তাই আপনাকে যা করছেন তা ছেড়ে যেতে হবে না।

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

একটি টাইমস্ট্যাম্প কনভার্ট করতে, একটি বিশৃঙ্খল JSON ব্লব পুনরায় ফরম্যাট করতে এবং তারপর একটি সময়ের পার্থক্য গণনা করতে পারা—সবকিছু একই ইন্টারফেস থেকে—একটি বিশাল সময় সাশ্রয়ী। এটি একটি অপ্রয়োজনীয়, বহু-টুল প্রক্রিয়াকে একটি একক, মসৃণ ক্রিয়ায় পরিণত করে।

শুধু একটি একক টুল নয়

একটি দুর্দান্ত ইন-ব্রাউজার ইউটিলিটি সাধারণত কেবল একটি টুল নয়; এটি একটি সম্পূর্ণ টুলকিটের অংশ। আপনি প্রায়শই টাইমস্ট্যাম্প কনভার্টারটি অন্যান্য কার্যকারিতার সাথে ব্যবহার করতে দেখতে পাবেন।

যেমন, আপনি এটি জুড়তে পারেন:

  • একটি JSON বা SQL ফরম্যাটার কিছু কোড পরিষ্কার করার জন্য আগে আপনি টাইমস্ট্যাম্প বের করবেন।
  • একটি বিল্ট-ইন ক্যালকুলেটর যা এপোক মানগুলোর উপর দ্রুত গণনা করতে। (আপনি ShiftShift ক্যালকুলেটর পৃষ্ঠায় একটি অনুরূপ টুল নিয়ে খেলতে পারেন যাতে এটি কীভাবে কাজ করে তা দেখতে পারেন)।
  • একটি টেক্সট তুলনা টুল দুইটি API প্রতিক্রিয়ার মধ্যে পার্থক্যগুলি চিহ্নিত করতে, টাইমস্ট্যাম্প এবং সবকিছু।

এক জায়গায় সমস্ত এই প্রয়োজনীয়তা থাকা একটি অনেক দ্রুত এবং আরও সমন্বিত কাজের প্রবাহ তৈরি করে। এটি কেবল সুবিধার ব্যাপার নয়—এটি সমস্ত ছোট, পুনরাবৃত্তি ব্যাঘাতগুলি কাটিয়ে উঠার ব্যাপার যা একত্রিত হয়ে আপনার উৎপাদনশীলতাকে একটি দিনের মধ্যে হত্যা করে।

কোডে ব্যবহারিক টাইমস্ট্যাম্প কনভার্সন

যদি আপনি একজন ডেভেলপার হন, আপনি জানেন যে টাইমস্ট্যাম্প নিয়ে কাজ করা কাজের একটি অংশ। কিন্তু আসুন সৎ হই, এক ভাষা থেকে অন্য ভাষায় সিনট্যাক্স কখনও একরকম হয় না। এই বিভাগটি আপনার জন্য একটি গাইড, কোড স্নিপেটগুলির সাথে ভর্তি যা আপনি ধরে নিতে পারেন এবং সেগুলি আপনার আসল কাজের প্ল্যাটফর্মগুলির জন্য ব্যবহার করতে পারেন। পুরানো Stack Overflow থ্রেডগুলির মধ্যে আর খোঁজার প্রয়োজন নেই—শুধু ব্যবহারিক উদাহরণগুলি আপনাকে এগিয়ে নিয়ে যেতে।

JavaScript, Python, এবং SQL-এ Unix টাইমস্ট্যাম্প কনভার্ট করার জন্য কোড উদাহরণ।

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

JavaScript-এ টাইমস্ট্যাম্প কনভার্ট করা

JavaScript-এর Date অবজেক্ট এখানে আপনার প্রধান টুল, কিন্তু এর একটি বড় অদ্ভুততা রয়েছে যা সব সময় ডেভেলপারদের বিভ্রান্ত করে: এটি মিলিসেকেন্ড-এ কাজ করে, সেকেন্ডে নয়। এটি একটি ক্লাসিক বাগের উৎস যখন আপনার ফ্রন্টএন্ড একটি ব্যাকএন্ডের সাথে কথা বলছে যা স্ট্যান্ডার্ড 10-সংখ্যার, সেকেন্ড-ভিত্তিক টাইমস্ট্যাম্প ব্যবহার করে।

একটি স্ট্যান্ডার্ড Unix টাইমস্ট্যাম্প (সেকেন্ডে) সঠিকভাবে একটি Date অবজেক্টে কনভার্ট করতে, আপনাকে এটি 1000 দ্বারা গুণ করতে হবে।

// একটি স্ট্যান্ডার্ড 10-সংখ্যার Unix টাইমস্ট্যাম্প (সেকেন্ডে)
const unixTimestamp = 1672531200;

// মিলিসেকেন্ডে কনভার্ট করুন, তারপর একটি Date অবজেক্ট তৈরি করুন
const dateObject = new Date(unixTimestamp * 1000);

// একটি পঠনযোগ্য UTC স্ট্রিংয়ে ফরম্যাট করুন
// আউটপুট: Sun, 01 Jan 2023 00:00:00 GMT
console.log(dateObject.toUTCString());

বর্তমান টাইমস্ট্যাম্প প্রয়োজন? Date.now() এটি মিলিসেকেন্ডে দেয়। শুধু মনে রাখবেন একটি স্ট্যান্ডার্ড 10-সংখ্যার টাইমস্ট্যাম্প API-তে ফেরত পাঠানোর আগে 1000 দ্বারা ভাগ করে এবং নিচে গোল করে ফেলুন।

Python-এ কনভার্সন পরিচালনা করা

ব্যাকএন্ডে, Python-এর datetime মডিউল একটি শক্তিশালী টুল। এটি অত্যন্ত নমনীয় এবং সময় অঞ্চল-সচেতন কনভার্সনের জন্য দুর্দান্ত সমর্থন রয়েছে, যা এটি বিভিন্ন অঞ্চলে সময় সঠিকভাবে পরিচালনা করার জন্য একটি নির্ভরযোগ্য পছন্দ করে তোলে।

এটি datetime লাইব্রেরির সাথে একটি টাইমস্ট্যাম্প কনভার্ট করার সরল উপায়:

import datetime

একটি স্ট্যান্ডার্ড 10-সংখ্যার 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-এ ডাটাবেস কনভার্সন

ডাটাবেসগুলি প্রায়শই Unix টাইমস্ট্যাম্প হিসাবে সময় সংরক্ষণ করে কারণ এগুলি কার্যকর। ভাল খবর হল যে বেশিরভাগ SQL ডায়ালেক্টগুলিতে আপনার কোয়েরির ভিতরে এই কনভার্সনগুলি পরিচালনা করার জন্য বিল্ট-ইন ফাংশন রয়েছে।

এটি কাঁচা পূর্ণসংখ্যার টাইমস্ট্যাম্প টেনে এনে আপনার অ্যাপ্লিকেশন কোডে রূপান্তর করার চেয়ে অনেক বেশি কার্যকর।

ইউনিক্স টাইমস্ট্যাম্প প্রায় সর্বজনীন, যা 90% এরও বেশি প্রোগ্রামিং ভাষায় ব্যবহৃত হয়—জাভাস্ক্রিপ্টের Date.now() থেকে পাইথনের time.time()—প্রতিদিনের ট্রিলিয়ন অপারেশন চালাচ্ছে। সময় অঞ্চলগুলি সঠিকভাবে পাওয়া অত্যন্ত গুরুত্বপূর্ণ; একটি শক্তিশালী ইউনিক্স টাইমস্ট্যাম্প কনভার্টর 400 এরও বেশি আইএএনএ অঞ্চল পরিচালনা করতে পারে, যা অনুমান করা 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()। এই ফাংশনটি সরাসরি একটি ইউনিক্স টাইমস্ট্যাম্পকে TIMESTAMP WITH TIME ZONE মানে রূপান্তর করে।

SELECT to_timestamp(1672531200);
-- ফেরত: 2023-01-01 00:00:00+00
কারণ এটি বক্স থেকে বের হতেই সময় অঞ্চল সচেতন, এটি একটি খুব শক্তিশালী পছন্দ গ্লোবাল দর্শকদের জন্য অ্যাপ্লিকেশনগুলির জন্য যেখানে সময়ের সঠিকতা অ-আলোচনা সাপেক্ষ।

টার্মিনালে টাইমস্ট্যাম্প রূপান্তর শিখা

যদি আপনি কমান্ড লাইনে থাকেন, তাহলে দ্রুত টাইমস্ট্যাম্প রূপান্তরের জন্য ব্রাউজার বা GUI তে স্যুইচ করা একটি সত্যিকারের কাজের প্রবাহ নষ্ট করে। এটি আপনার মনোযোগ ভেঙে দেয়। ভাল খবর হল, আপনাকে তা করতে হবে না; লিনাক্স এবং ম্যাকওএস উভয়েই এই রূপান্তরগুলি পরিচালনা করার জন্য শক্তিশালী, স্থানীয় সরঞ্জাম রয়েছে যা কখনও টার্মিনাল ছাড়াই।

এর জন্য প্রধান ইউটিলিটি হল সাধারণ date কমান্ড। এটি প্রায় প্রতিটি ইউনিক্স-সদৃশ সিস্টেমে রয়েছে, তবে একটি সমস্যা রয়েছে: এটি একটি ইউনিক্স টাইমস্ট্যাম্প কনভার্টর হিসাবে ব্যবহারের জন্য সিনট্যাক্স লিনাক্স (GNU) এবং ম্যাকওএস (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 এ feed করতে পারেন একটি তাত্ক্ষণিক রূপান্তরের জন্য। এটি একটি বহু-ধাপ ডিবাগিং কাজকে একটি একক, মার্জিত এক-লাইনারে পরিণত করে।

ম্যাকওএসে রূপান্তর পরিচালনা করা

এখন, যদি আপনি ম্যাকে একই লিনাক্স কমান্ডটি চালান, এটি একটি ত্রুটি ছুঁড়ে দেবে। ম্যাকওএস যে BSD সংস্করণের date ব্যবহার করে তা -r ফ্ল্যাগটি প্রয়োজন, এবং এটি @ পূর্বসূরী প্রয়োজন হয় না।

এখানে আপনি ম্যাকের উপর একই টাইমস্ট্যাম্পটি কিভাবে রূপান্তর করবেন:

date -r 1704067200

লিনাক্স সংস্করণের মতো, আপনি সঠিক আউটপুট পেতে ফরম্যাটিং অপশন যুক্ত করতে পারেন।

date -r 1704067200 +"%Y-%m-%d %T %Z"

আউটপুট: 2024-01-01 00:00:00 UTC

এই ক্ষুদ্র পার্থক্যটি লিনাক্স এবং ম্যাকওএসের মধ্যে প্রায়শই ঝাঁপিয়ে পড়া যেকোনও ব্যক্তির জন্য একটি ক্লাসিক বাধা। উভয় সংস্করণ মনে রাখা আপনাকে ভবিষ্যতে অনেক মাথাব্যথা থেকে বাঁচাবে।

একবার আপনি এই কমান্ডগুলি শিখলে, আপনি টাইমস্ট্যাম্প রূপান্তরগুলি সরাসরি আপনার শেল স্ক্রিপ্ট এবং লগ বিশ্লেষণে বুনতে পারেন। এটি একটি ছোট দক্ষতা, তবে এটি কিছু গুরুতর উৎপাদনশীলতা লাভে যোগ করে, আপনাকে জোনে রাখে এবং গুরুত্বপূর্ণ কাজের উপর মনোযোগ কেন্দ্রীভূত করে।

সাধারণ টাইমস্ট্যাম্প pitfalls এবং কিভাবে এড়াতে হয়

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

সেকেন্ড বনাম মিলিসেকেন্ড মিশ্রণ

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

যখন একটি ফ্রন্ট-এন্ড অ্যাপ একটি মিলিসেকেন্ড মান একটি ব্যাকএন্ডে পাঠায় যা সেকেন্ড আশা করছে, তখন পরিস্থিতি বিপর্যস্ত হয়ে যায়।

একটি unix timestamp convertor এর জন্য, সেই ১৩-সংখ্যার সংখ্যা ভবিষ্যতের হাজার হাজার বছরের একটি তারিখের মতো দেখায়। এটি নীরবে ডেটা যাচাইকরণ, সময়সূচী লজিক, এবং আপনি যে কোনও ঐতিহাসিক রেকর্ড রাখতে চেষ্টা করছেন তা ধ্বংস করতে পারে। এটি এমন একটি সূক্ষ্ম ডেটা দুর্নীতি যা আপনি সপ্তাহের জন্যও লক্ষ্য করতে নাও পারেন।

টাইমজোন ফাঁদ

অন্য একটি ফাঁদ যা অভিজ্ঞ ডেভেলপারদেরও ধরা পড়তে পারে তা হল টাইমজোন পরিচালনা। এর নিজস্ব সংজ্ঞা অনুসারে, একটি ইউনিক্স টাইমস্ট্যাম্প সর্বদা সমন্বিত বিশ্ব সময় (UTC) তে থাকে। এটি সময়ের একটি একক, সার্বজনীন মুহূর্তকে প্রতিনিধিত্ব করে, সম্পূর্ণভাবে অবস্থানের স্বাধীন। ফাঁদটি তখনই ঘটে যখন আপনি এটি ভুলে যান এবং ধরে নেন যে একটি টাইমস্ট্যাম্প ব্যবহারকারীর স্থানীয় সময়কে প্রতিফলিত করে।

এই ভুলটি সাধারণত ঘটে যখন আপনি একটি টাইমস্ট্যাম্পকে একটি পাঠযোগ্য তারিখে রূপান্তর করেন টাইমজোন উল্লেখ না করে। আপনার সিস্টেম প্রায়ই সার্ভারের স্থানীয় সময়ে ডিফল্ট হয়, যা বিশৃঙ্খলা সৃষ্টি করে। নিউ ইয়র্কের একজন ব্যবহারকারী লন্ডনের জন্য নির্ধারিত সময় দেখতে পারে, কিন্তু এটি কয়েক ঘণ্টা ভুল।

সোনালী নিয়মটি সহজ: সর্বদা আপনার ব্যাকএন্ডে টাইমস্ট্যাম্পগুলিকে UTC হিসাবে বিবেচনা করুন। এগুলি UTC হিসাবে সংরক্ষণ করুন, UTC হিসাবে প্রক্রিয়া করুন, এবং শুধুমাত্র ফ্রন্ট-এন্ডে, প্রদর্শনের মুহূর্তে ব্যবহারকারীর স্থানীয় সময়ে রূপান্তর করুন।

সাধারণ টাইমস্ট্যাম্প রূপান্তর ত্রুটির সমাধান

যখন কিছু ভুল হয়, তখন লক্ষণগুলি বিভ্রান্তিকর হতে পারে। এখানে একটি দ্রুত রেফারেন্স টেবিল রয়েছে যা আমি অভিজ্ঞতা থেকে তৈরি করেছি যাতে আপনি সবচেয়ে সাধারণ সমস্যাগুলি দ্রুত নির্ণয় এবং সমাধান করতে পারেন।

লক্ষণ সম্ভাব্য কারণ সমাধান
তারিখ ৫২৩৬১ সালে বা অন্য কোনও দূরবর্তী ভবিষ্যতে রয়েছে। মিলিসেকেন্ড বনাম সেকেন্ড। আপনি একটি ১৩-সংখ্যার মিলিসেকেন্ড টাইমস্ট্যাম্প একটি ফাংশনে পাঠাচ্ছেন যা ১০-সংখ্যার সেকেন্ড টাইমস্ট্যাম্প আশা করছে। প্রক্রিয়াকরণের আগে টাইমস্ট্যাম্পটি ১০০০ দ্বারা ভাগ করুন। সর্বদা আসা টাইমস্ট্যাম্পগুলির সংখ্যা যাচাই করুন।
সময় কয়েক ঘণ্টা ভুল, কিন্তু তারিখ সঠিক। টাইমজোন ভুল পরিচালনা। টাইমস্ট্যাম্পটি ব্যবহারকারীর বা UTC এর পরিবর্তে সার্ভারের স্থানীয় সময় ব্যবহার করে রূপান্তরিত হয়েছিল। সকল রূপান্তরে লক্ষ্য টাইমজোন স্পষ্টভাবে উল্লেখ করুন। স্থানীয় সময়ে শুধুমাত্র ক্লায়েন্ট-সাইডে রূপান্তর করুন।
তারিখ ১ জানুয়ারী, ১৯৭০ এ আটকে আছে। অবৈধ বা শূন্য টাইমস্ট্যাম্প। টাইমস্ট্যাম্প মান সম্ভবত 0, null, বা undefined রূপান্তরের চেষ্টা করার আগে নিশ্চিত করুন যে টাইমস্ট্যাম্প একটি বৈধ ধনাত্মক পূর্ণসংখ্যা। একটি ব্যাকআপ মান প্রদান করুন।
"অবৈধ তারিখ" বা একটি NaN ত্রুটি পাচ্ছেন। ভুল ডেটা টাইপ। টাইমস্ট্যাম্পটি একটি সংখ্যা প্রয়োজন যখন একটি স্ট্রিং বা অন্য কোনও অ-সংখ্যাসূচক টাইপ হিসাবে বিবেচিত হচ্ছে। তারিখের ফাংশনে ব্যবহার করার আগে টাইমস্ট্যাম্পটিকে একটি পূর্ণসংখ্যায় (JS এ parseInt(), পাইথনে int()) স্পষ্টভাবে পার্স করুন।

মনে রাখবেন, ইনপুটের উপর একটি দ্রুত পরীক্ষা আপনাকে পরে ঘণ্টার পর ঘণ্টা ডিবাগিং থেকে বাঁচাতে পারে।

মানক ফরম্যাটের মাধ্যমে অস্পষ্টতা এড়ানো

সিস্টেমগুলির মধ্যে ডেটা পাঠানোর সময় কাঁচা পূর্ণসংখ্যার টাইমস্ট্যাম্পগুলির উপর নির্ভর করা বিভ্রান্তির জন্য একটি রেসিপি হতে পারে। এ কারণেই ISO 8601 (2022-05-17T12:00:00Z) এর মতো একটি সার্বজনীন স্ট্রিং ফরম্যাটে মানকীকরণ করা একটি দুর্দান্ত প্রতিরক্ষামূলক পদক্ষেপ। ইউনিক্স টাইমস্ট্যাম্পগুলিকে (যেমন 1652905200) এইভাবে একটি পরিষ্কার, স্ব-ডকুমেন্টিং ফরম্যাটে রূপান্তর করা ৩৭% ক্রস-টাইমজোন API কলের ত্রুটি প্রতিরোধ করতে সহায়তা করে।

মনে রাখবেন যে ৭২% ফর্চুন ৫০০ কোম্পানি লগ বিশ্লেষণের জন্য ইউনিক্স টাইমস্ট্যাম্প ব্যবহার করে, যেখানে একটি একক ভুল $১০,০০০ এরও বেশি খরচ করতে পারে প্রতি ঘণ্টায় ডাউনটাইমে, সঠিকতা সবকিছু। আপনি বিভিন্ন শিল্পে কিভাবে এপোক সময় ব্যবহার করা হয় সে সম্পর্কে আরও পড়তে পারেন EpochConverter এ।

যারা ডেটাবেস পরিচালনা করছেন, তাদের জন্য ধারাবাহিক টাইমস্ট্যাম্প পরিচালনা অত্যন্ত গুরুত্বপূর্ণ। যদি আপনি প্রায়শই আপনার ডেটাবেসে বিভিন্ন টাইমস্ট্যাম্প ফরম্যাট নিয়ে লড়াই করেন, তবে আমাদের একটি শক্তিশালী SQL formatter ব্যবহার করার গাইড আপনাকে আপনার কোয়েরিগুলি পরিষ্কার এবং পূর্বানুমানযোগ্য রাখতে সাহায্য করতে পারে।

এই সিদ্ধান্ত গাছ আপনাকে আপনার অপারেটিং সিস্টেমের জন্য সঠিক কমান্ড বেছে নিতে সাহায্য করে, যখন আপনাকে একটি দ্রুত রূপান্তরের প্রয়োজন হয় তখন সিনট্যাক্স ত্রুটি প্রতিরোধ করে।

Linux এবং macOS অপারেটিং সিস্টেমে টাইমস্ট্যাম্প রূপান্তরের জন্য টার্মিনাল কমান্ডগুলির একটি ফ্লোচার্ট।

উপরের ফ্লোচার্টটি স্পষ্টভাবে দেখায় যে date কমান্ডের মধ্যে গুরুত্বপূর্ণ সিনট্যাক্সের পার্থক্য কীভাবে লিনাক্স (-d @...) এবং macOS (-r ...)—বিভিন্ন পরিবেশে কাজ করা ডেভেলপারদের জন্য একটি সাধারণ ফাঁদ।

আপনার কোডকে বুলেটপ্রুফ করতে, সর্বদা একটি চেক বাস্তবায়ন করুন যাতে একটি আসা টাইমস্ট্যাম্পের দৈর্ঘ্য যাচাই করা যায়। একটি সহজ ফাংশন যা ১০-সংখ্যার (সেকেন্ড) বা ১৩-সংখ্যার (মিলিসেকেন্ড) মানের জন্য পরীক্ষা করে, এই ত্রুটিগুলি আপনার অ্যাপ্লিকেশনের লজিককে বিষাক্ত করার আগে ধরতে পারে।

ইউনিক্স টাইমস্ট্যাম্প সম্পর্কে সাধারণ প্রশ্ন

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

কেন এতগুলি API টাইমস্ট্যাম্প ব্যবহার করে ISO 8601 স্ট্রিংয়ের পরিবর্তে?

এটি সত্যিই কাঁচা দক্ষতার উপর নির্ভর করে। একটি ইউনিক্স টাইমস্ট্যাম্প হল একটি একক সংখ্যা, যা এটি '২০২৩-১০-২৭T১০:০০:০০Z' এর মতো একটি স্ট্রিংয়ের তুলনায় অত্যন্ত সংক্ষিপ্ত করে তোলে।

ছোট আকারের মানে হল কম ডেটা তারের মাধ্যমে পাঠানো, যা ব্যান্ডউইথ সঞ্চয় করে এবং API প্রতিক্রিয়া দ্রুত করতে পারে।

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

টাইমজোনগুলি কীভাবে সঠিকভাবে পরিচালনা করবেন?

এটি বড় বিষয়। এখানে সোনালী নিয়ম: একটি ইউনিক্স টাইমস্ট্যাম্প সর্বদা, সর্বদা UTC তে হয়। এতে কোন টাইমজোনের ধারণা নেই। এটি কেবল একটি কাঁচা সেকেন্ডের সংখ্যা যা এপোক থেকে গণনা করা হয়েছে।

টাইমজোনগুলি কেবল তখনই গুরুত্বপূর্ণ যখন আপনাকে সেই টাইমস্ট্যাম্পটি একজন মানুষের কাছে দেখাতে হয়।

আমার পরামর্শ? ব্যাকএন্ডে সবকিছুর জন্য UTC ব্যবহার করুন। এটি আপনার ডাটাবেসে একটি UTC টাইমস্ট্যাম্প হিসাবে সংরক্ষণ করুন, আপনার APIs এর মাধ্যমে UTC তে পাঠান, এবং আপনার সমস্ত সার্ভার-সাইড লজিক UTC তে করুন। একমাত্র সময় আপনি এটি স্থানীয় টাইমজোনে রূপান্তর করবেন তা হল ফ্রন্ট-এন্ডে, ব্যবহারকারীর কাছে প্রদর্শনের ঠিক আগে। এই একক অনুশীলন আপনাকে টাইমজোন এবং ডে লাইট সেভিং বাগের একটি পুরো মহাবিশ্ব থেকে রক্ষা করবে।

আমি কি এখনও 2038 সালের সমস্যার বিষয়ে চিন্তা করতে হবে?

বেশিরভাগ নতুন প্রকল্পের জন্য, সম্ভবত না। "2038 সালের সমস্যা" হল পুরানো সিস্টেমগুলির একটি অবশিষ্টাংশ যা টাইমস্ট্যাম্প সংরক্ষণ করতে একটি 32-বিট স্বাক্ষরিত পূর্ণসংখ্যা ব্যবহার করেছিল। একবার সেই সংখ্যা খুব বড় হলে, এটি ঘুরে যায় এবং নেতিবাচক হয়ে যায়, তারিখগুলি 1901 এ ফিরে যায়।

সৌভাগ্যবশত, প্রায় সমস্ত আধুনিক সিস্টেম—অপারেটিং সিস্টেম থেকে ডাটাবেস পর্যন্ত—অনেক আগে 64-বিট পূর্ণসংখ্যা এ চলে গেছে। এটি কার্যকরভাবে ক্যানটিকে এতদূর ঠেলে দেয় (বাস্তবে, বিলিয়ন বছর) যে এটি আমাদের জন্য আর একটি বাস্তব উদ্বেগ নয়।

এটি বলার পর, যদি আপনি একটি লিগ্যাসি সিস্টেম রক্ষণাবেক্ষণ করছেন বা এম্বেডেড হার্ডওয়্যার (আইওটি ডিভাইসগুলি ভাবুন) নিয়ে কাজ করছেন, তবে এটি অবশ্যই একটি বিষয় যা সম্পর্কে সচেতন হওয়া উচিত। সর্বদা জানুন আপনি কোন ধরনের স্থাপত্যে নির্মাণ করছেন।

আমি কীভাবে দ্রুত Excel বা Google Sheets এ একটি টাইমস্ট্যাম্প রূপান্তর করতে পারি?

আপনাকে এর জন্য আপনার ডেটা আলাদা ইউনিক্স টাইমস্ট্যাম্প রূপান্তরক এ নিয়ে যেতে হবে না। একটি সাধারণ সূত্র কাজ করবে। ধরে নিচ্ছি আপনার টাইমস্ট্যাম্পটি সেলে A1:

  • সেকেন্ডে টাইমস্ট্যাম্পের জন্য (10 ডিজিট): =A1 / 86400 + DATE(1970,1,1)
  • মিলিসেকেন্ডে টাইমস্ট্যাম্পের জন্য (13 ডিজিট): =A1 / 86400000 + DATE(1970,1,1)

শুধু সেই সূত্রটি প্রবেশ করুন, তারপর সেলটিকে "তারিখ" বা "তারিখ সময়" হিসাবে ফরম্যাট করুন। যখন আপনি দ্রুত ডেটা রপ্তানি বিশ্লেষণ করছেন এবং আপনার প্রবাহ ভাঙতে চান না তখন এটি একটি জীবনরক্ষাকারী।


সরল কাজের জন্য আপনার সম্পাদক, কমান্ড লাইন এবং এক ডজন ব্রাউজার ট্যাবের মধ্যে বারবার পরিবর্তন করতে ক্লান্ত? ShiftShift Extensions স্যুট একটি শক্তিশালী ইউনিক্স টাইমস্ট্যাম্প রূপান্তরক, JSON ফরম্যাটার, SQL সুন্দরী, এবং আরও অনেক কিছু আপনার ব্রাউজারে একত্রিত করে। আপনার প্রয়োজনীয় সবকিছু কেবল একটি কীবোর্ড শর্টকাট দূরে।

আজই ShiftShift Extensions পান এবং আপনার কাজের প্রবাহকে সহজ করুন https://shiftshift.app

উল্লেখিত এক্সটেনশনগুলি