یونکس ٹائم اسٹیمپ کنورٹر
تبدیل شدہ تاریخ اور وقت
یونکس ٹائم اسٹیمپ کنورٹر
تعارف
یونکس ٹائم اسٹیمپ (جسے POSIX وقت یا ایپوک وقت بھی کہا جاتا ہے) وقت کے ایک نقطے کی وضاحت کرنے کے لیے ایک نظام ہے۔ یہ 1 جنوری 1970 (آدھی رات UTC/GMT) کے بعد گزرے ہوئے سیکنڈز کی تعداد ہے، چھلانگ کے سیکنڈز کو شمار کیے بغیر۔ یونکس ٹائم اسٹیمپ کمپیوٹر سسٹمز اور پروگرامنگ زبانوں میں بڑے پیمانے پر استعمال ہوتے ہیں کیونکہ یہ مخصوص لمحے کی ایک جامع، زبان سے آزاد نمائندگی فراہم کرتے ہیں۔
یہ کنورٹر آپ کو ایک یونکس ٹائم اسٹیمپ کو انسانی پڑھنے کے قابل تاریخ اور وقت کی شکل میں تبدیل کرنے کی اجازت دیتا ہے۔ یہ مختلف علاقائی اور ذاتی ترجیحات کو پورا کرنے کے لیے 12 گھنٹے (AM/PM) اور 24 گھنٹے کے وقت کے دونوں فارمیٹس کی حمایت کرتا ہے۔
یونکس ٹائم اسٹیمپ کیسے کام کرتا ہے
یونکس ٹائم اسٹیمپ یونکس ایپوک (1 جنوری 1970، 00:00:00 UTC) کے بعد گزرے ہوئے سیکنڈز کی تعداد کے طور پر شمار کیا جاتا ہے۔ یہ انہیں وقت کے فرق کا حساب لگانے اور تاریخوں کو ایک جامع شکل میں ذخیرہ کرنے کے لیے خاص طور پر مفید بناتا ہے۔
یونکس ٹائم اسٹیمپ سے کیلنڈر کی تاریخ میں تبدیلی کے لیے ریاضیاتی تبدیلی میں کئی مراحل شامل ہیں:
- یونکس ایپوک (1 جنوری 1970، 00:00:00 UTC) کے ساتھ شروع کریں
- ٹائم اسٹیمپ میں سیکنڈز کی تعداد شامل کریں
- چھلانگ کے سال، مختلف مہینوں کی لمبائی، اور دیگر کیلنڈر کی پیچیدگیوں کا حساب لگائیں
- اگر ضرورت ہو تو ٹائم زون کی ایڈجسٹمنٹ کریں
مثال کے طور پر، یونکس ٹائم اسٹیمپ 1609459200
جمعہ، 1 جنوری 2021، 00:00:00 UTC کی نمائندگی کرتا ہے۔
تبدیلی کا فارمولا اس طرح بیان کیا جا سکتا ہے:
زیادہ تر پروگرامنگ زبانیں اور آپریٹنگ سسٹمز اس تبدیلی کو سنبھالنے کے لیے بلٹ ان فنکشنز فراہم کرتے ہیں، جو پیچیدہ کیلنڈر کی حسابات کو چھپاتے ہیں۔
وقت کے فارمیٹ کے اختیارات
یہ کنورٹر دو وقت کے فارمیٹ کے اختیارات پیش کرتا ہے:
-
24 گھنٹے کا فارمیٹ (جسے کبھی کبھار "فوجی وقت" بھی کہا جاتا ہے): گھنٹے 0 سے 23 تک ہوتے ہیں، اور AM/PM کی کوئی وضاحت نہیں ہوتی۔ مثال کے طور پر، 3:00 PM کو 15:00 کے طور پر ظاہر کیا جاتا ہے۔
-
12 گھنٹے کا فارمیٹ: گھنٹے 1 سے 12 تک ہوتے ہیں، آدھی رات سے دوپہر تک کے لیے AM (ante meridiem) اور دوپہر سے آدھی رات تک کے لیے PM (post meridiem) ہوتا ہے۔ مثال کے طور پر، 24 گھنٹے کے فارمیٹ میں 15:00 کو 3:00 PM کے طور پر ظاہر کیا جاتا ہے۔
ان فارمیٹس کے درمیان انتخاب بنیادی طور پر علاقائی روایات اور ذاتی ترجیحات کا معاملہ ہے:
- 24 گھنٹے کا فارمیٹ زیادہ تر یورپ، لاطینی امریکہ، اور ایشیا میں استعمال ہوتا ہے، نیز دنیا بھر میں سائنسی، فوجی، اور طبی سیاق و سباق میں۔
- 12 گھنٹے کا فارمیٹ روزمرہ کے استعمال کے لیے امریکہ، کینیڈا، آسٹریلیا، اور کچھ دیگر انگریزی بولنے والے ممالک میں عام ہے۔
کنارے کے کیسز اور حدود
یونکس ٹائم اسٹیمپس کے ساتھ کام کرتے وقت، کئی کنارے کے کیسز اور حدود سے آگاہ ہونا ضروری ہے:
-
منفی ٹائم اسٹیمپس: یہ 1 جنوری 1970 سے پہلے کی تاریخوں کی نمائندگی کرتے ہیں۔ اگرچہ ریاضی کے لحاظ سے درست ہیں، لیکن کچھ سسٹمز منفی ٹائم اسٹیمپس کو صحیح طریقے سے سنبھال نہیں سکتے۔
-
سال 2038 کا مسئلہ: یونکس ٹائم اسٹیمپس اکثر 32 بٹ سائنڈ انٹیجرز کے طور پر ذخیرہ کیے جاتے ہیں، جو 19 جنوری 2038 کو اوور فلو ہو جائیں گے۔ اس کے بعد، 32 بٹ سسٹمز صحیح طریقے سے اوقات کی نمائندگی کرنے میں ناکام رہیں گے جب تک کہ انہیں بڑے انٹیجر کی قسم استعمال کرنے کے لیے تبدیل نہ کیا جائے۔
-
انتہائی بڑے ٹائم اسٹیمپس: بہت دور کی مستقبل کی تاریخیں بعض سسٹمز میں نمائندگی نہیں کی جا سکتیں، یا غیر متوازن طریقے سے سنبھالی جا سکتی ہیں۔
-
چھلانگ کے سیکنڈ: یونکس وقت چھلانگ کے سیکنڈز کا حساب نہیں رکھتا، جو کبھی کبھار UTC میں زمین کی غیر باقاعدہ گردش کے لیے شامل کیے جاتے ہیں۔ اس کا مطلب ہے کہ یونکس وقت فلکیاتی وقت کے ساتھ درست طور پر ہم آہنگ نہیں ہے۔
-
ٹائم زون کی غور و فکر: یونکس ٹائم اسٹیمپس لمحات کو UTC میں ظاہر کرتے ہیں۔ مقامی وقت میں تبدیل کرنے کے لیے اضافی ٹائم زون کی معلومات کی ضرورت ہوتی ہے۔
-
دن کی بچت کا وقت: ٹائم اسٹیمپس کو مقامی وقت میں تبدیل کرتے وقت، دن کی بچت کے وقت کی تبدیلیوں کی پیچیدگیوں پر غور کرنا ضروری ہے۔
استعمال کے کیسز
یونکس ٹائم اسٹیمپس کمپیوٹنگ اور ڈیٹا انتظامیہ میں متعدد ایپلی کیشنز میں استعمال ہوتے ہیں:
-
ڈیٹا بیس ریکارڈ: ٹائم اسٹیمپس عام طور پر یہ ریکارڈ کرنے کے لیے استعمال ہوتے ہیں کہ اندراجات کب بنائے گئے یا ترمیم کیے گئے۔
-
ویب ڈویلپمنٹ: HTTP ہیڈرز، کوکیز، اور کیشنگ کے طریقہ کار اکثر یونکس ٹائم اسٹیمپس کا استعمال کرتے ہیں۔
-
لاگ فائلیں: سسٹم لاگ عام طور پر واقعات کو درست ترتیب میں ریکارڈ کرنے کے لیے یونکس ٹائم اسٹیمپس کے ساتھ ریکارڈ کرتے ہیں۔
-
ورژن کنٹرول سسٹمز: Git اور دیگر VCS ٹائم اسٹیمپس کا استعمال کرتے ہیں تاکہ یہ ریکارڈ کیا جا سکے کہ کمیٹس کب کی گئیں۔
-
API جوابات: بہت سے ویب APIs اپنے جوابات میں ٹائم اسٹیمپس شامل کرتے ہیں تاکہ یہ اشارہ کیا جا سکے کہ ڈیٹا کب تیار کیا گیا یا وسائل کب آخری بار ترمیم کیے گئے۔
-
فائل کے نظام: فائل کی تخلیق اور ترمیم کے اوقات اکثر یونکس ٹائم اسٹیمپس کے طور پر ذخیرہ کیے جاتے ہیں۔
-
سیشن کی انتظامیہ: ویب ایپلیکیشنز ٹائم اسٹیمپس کا استعمال کرتی ہیں تاکہ یہ طے کیا جا سکے کہ صارف کے سیشن کب ختم ہونے چاہئیں۔
-
ڈیٹا تجزیہ: ٹائم اسٹیمپس تجزیاتی ایپلیکیشنز میں وقتی ڈیٹا کے ساتھ کام کرنے کے لیے ایک معیاری طریقہ فراہم کرتے ہیں۔
متبادل
اگرچہ یونکس ٹائم اسٹیمپس بڑے پیمانے پر استعمال ہوتے ہیں، لیکن کچھ سیاق و سباق میں زیادہ موزوں وقت کی نمائندگی کی شکلیں ہیں:
-
ISO 8601: ایک معیاری سٹرنگ فارمیٹ (جیسے "2021-01-01T00:00:00Z") جو انسانی پڑھنے کے قابل ہے جبکہ ترتیب دینے کی صلاحیت کو برقرار رکھتا ہے۔ یہ ڈیٹا کے تبادلے اور صارف کے سامنے آنے والی ایپلی کیشنز کے لیے اکثر ترجیح دی جاتی ہے۔
-
RFC 3339: انٹرنیٹ پروٹوکول میں استعمال ہونے والا ISO 8601 کا ایک پروفائل، جس میں سخت فارمیٹنگ کی ضروریات ہیں۔
-
انسانی پڑھنے کے قابل فارمیٹس: مقامی تاریخ کی تاریں (جیسے "1 جنوری 2021") براہ راست صارف کے تعامل کے لیے زیادہ موزوں ہیں لیکن حساب کتاب کے لیے کم موزوں ہیں۔
-
مائیکروسافٹ FILETIME: ایک 64 بٹ قیمت جو 1601-01-01 کے بعد 100 نانو سیکنڈ کے وقفوں کی تعداد کی نمائندگی کرتی ہے، جو ونڈوز سسٹمز میں استعمال ہوتی ہے۔
-
جولین دن کا نمبر: فلکیات اور کچھ سائنسی ایپلی کیشنز میں استعمال ہوتا ہے، جو 4713 قبل مسیح سے دنوں کی گنتی کرتا ہے۔
وقت کے فارمیٹ کا انتخاب عوامل جیسے:
- درکار درستگی
- انسانی پڑھنے کی ضروریات
- ذخیرہ کرنے کی حدود
- موجودہ سسٹمز کے ساتھ ہم آہنگی
- تاریخوں کی رینج جس کی نمائندگی کی ضرورت ہے
تاریخ
یونکس وقت کا تصور یونکس آپریٹنگ سسٹم کی ترقی کے ساتھ شروع ہوا جو بیل لیبز میں 1960 کی دہائی اور 1970 کی دہائی کے اوائل میں ہوا۔ ایپوک کے طور پر 1 جنوری 1970 کا انتخاب کچھ حد تک بے ترتیب تھا لیکن اس وقت کے لیے عملی تھا—یہ دلچسپی کی تاریخوں کے لیے ذخیرہ کرنے کی ضروریات کو کم کرنے کے لیے حالیہ تھا لیکن تاریخی ڈیٹا کے لیے مفید ہونے کے لیے کافی دور تھا۔
اصل نفاذ نے سیکنڈز کی تعداد کو ذخیرہ کرنے کے لیے 32 بٹ سائنڈ انٹیجر کا استعمال کیا، جو اس وقت یونکس سسٹمز کی متوقع عمر کے لیے کافی تھا۔ تاہم، اس فیصلے نے سال 2038 کے مسئلے (کبھی کبھار "Y2K38" یا "یونکس صدی کا بگ" کہا جاتا ہے) کی وجہ بنی، کیونکہ 32 بٹ سائنڈ انٹیجرز صرف 1 جنوری 2038 (03:14:07 UTC) تک کی تاریخوں کی نمائندگی کر سکتے ہیں۔
جیسے جیسے یونکس اور یونکس جیسے آپریٹنگ سسٹمز کی مقبولیت بڑھتی گئی، یونکس ٹائم اسٹیمپ کمپیوٹنگ میں ایک غیر رسمی معیار بن گیا۔ اسے متعدد پروگرامنگ زبانوں، ڈیٹا بیس، اور ایپلی کیشنز نے اپنایا، جو اپنے اصل یونکس ماحول سے بہت آگے بڑھ گیا۔
جدید سسٹمز میں بڑھتی ہوئی تعداد میں 64 بٹ انٹیجرز کو ٹائم اسٹیمپس کے لیے استعمال کیا جاتا ہے، جو ایپوک سے تقریباً 292 ارب سالوں کی نمائندگی کی حد کو بڑھاتا ہے، جس سے سال 2038 کے مسئلے کو مؤثر طریقے سے حل کیا جا رہا ہے۔ تاہم، وراثتی سسٹمز اور ایپلی کیشنز اب بھی خطرے میں ہو سکتی ہیں۔
یونکس ٹائم اسٹیمپ کی سادگی اور افادیت نے اس کی موجودگی کو یقینی بنایا ہے، حالانکہ زیادہ ترقی یافتہ وقت کی نمائندگی کی شکلیں تیار کی گئی ہیں۔ یہ کمپیوٹنگ میں ایک بنیادی تصور کے طور پر جاری رہتا ہے، ہمارے ڈیجیٹل انفراسٹرکچر کی بہت سی بنیادوں کو سہارا دیتا ہے۔
کوڈ کے نمونے
یہاں مختلف پروگرامنگ زبانوں میں یونکس ٹائم اسٹیمپس کو انسانی پڑھنے کے قابل تاریخوں میں تبدیل کرنے کے طریقے کے نمونے ہیں:
// جاوا اسکرپٹ ٹائم اسٹیمپ تبدیلی
function convertUnixTimestamp(timestamp, use12Hour = false) {
// ایک نئی تاریخ کی شے بنائیں (جاوا اسکرپٹ ملی سیکنڈز کا استعمال کرتا ہے)
const date = new Date(timestamp * 1000);
// فارمیٹ کے اختیارات
const options = {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long',
hour: use12Hour ? 'numeric' : '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: use12Hour
};
// مقامی فارمیٹنگ کا استعمال کرتے ہوئے سٹرنگ میں تبدیل کریں
return date.toLocaleString(undefined, options);
}
// مثال کا استعمال
const timestamp = 1609459200; // 1 جنوری 2021 00:00:00 UTC
console.log(convertUnixTimestamp(timestamp, false)); // 24 گھنٹے کا فارمیٹ
console.log(convertUnixTimestamp(timestamp, true)); // 12 گھنٹے کا فارمیٹ
کنارے کے کیسز کو سنبھالنا
یونکس ٹائم اسٹیمپس کے ساتھ کام کرتے وقت، یہ ضروری ہے کہ کنارے کے کیسز کو درست طریقے سے سنبھالا جائے۔ یہاں کچھ عام کنارے کے کیسز کو سنبھالنے کے طریقے کے نمونے ہیں:
// جاوا اسکرپٹ کنارے کے کیسز کا انتظام
function safeConvertTimestamp(timestamp, use12Hour = false) {
// چیک کریں کہ آیا ٹائم اسٹیمپ درست ہے
if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
return "غلط ٹائم اسٹیمپ";
}
// منفی ٹائم اسٹیمپس کے لیے چیک کریں (1970 سے پہلے کی تاریخیں)
if (timestamp < 0) {
// کچھ براؤزر منفی ٹائم اسٹیمپس کو صحیح طریقے سے سنبھال نہیں سکتے
// 1970 سے پہلے کی تاریخوں کے لیے زیادہ مضبوط طریقہ استعمال کریں
const date = new Date(timestamp * 1000);
if (isNaN(date.getTime())) {
return "غلط تاریخ (1970 سے پہلے)";
}
}
// Y2K38 مسئلے کے لیے چیک کریں (32 بٹ سسٹمز کے لیے)
const maxInt32 = 2147483647; // 32 بٹ سائنڈ انٹیجر کی زیادہ سے زیادہ قیمت
if (timestamp > maxInt32) {
// جدید جاوا اسکرپٹ میں بہت بڑے ٹائم اسٹیمپس کے لیے BigInt استعمال کرنے پر غور کریں
console.warn("ٹائم اسٹیمپ 32 بٹ انٹیجر کی حد سے تجاوز کر گیا ہے (Y2K38 مسئلہ)");
}
// معمول کی تبدیلی کے ساتھ آگے بڑھیں
try {
const date = new Date(timestamp * 1000);
const options = {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long',
hour: use12Hour ? 'numeric' : '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: use12Hour
};
return date.toLocaleString(undefined, options);
} catch (error) {
return "ٹائم اسٹیمپ کو تبدیل کرنے میں خرابی: " + error.message;
}
}
حوالہ جات
-
"یونکس وقت۔" وکیپیڈیا، وکیمیڈیا فاؤنڈیشن، https://en.wikipedia.org/wiki/Unix_time
-
"سال 2038 کا مسئلہ۔" وکیپیڈیا، وکیمیڈیا فاؤنڈیشن، https://en.wikipedia.org/wiki/Year_2038_problem
-
اولسن، آرٹھر ڈیوڈ۔ "کیلنڈر کے وقت کی پیچیدگیاں۔" اوپن گروپ، https://www.usenix.org/legacy/events/usenix01/full_papers/olson/olson.pdf
-
"ISO 8601۔" وکیپیڈیا، وکیمیڈیا فاؤنڈیشن، https://en.wikipedia.org/wiki/ISO_8601
-
"RFC 3339: انٹرنیٹ پر تاریخ اور وقت: ٹائم اسٹیمپس۔" انٹرنیٹ انجینئرنگ ٹاسک فورس (IETF)، https://tools.ietf.org/html/rfc3339
-
کرننگھن، برائن و۔، اور ڈینس ایم۔ رچے۔ "سی پروگرامنگ زبان۔" پرینٹیس ہال، 1988۔