1641 সালে কীভাবে একটি ফাইল তৈরি করা যেতে পারে?


75

কয়েক বছর আগে, আমি আমাদের ফাইলসভারে এই ফাইলটিতে হোঁচট খেয়েছি।

মাইক্রোসফ্ট উইন্ডোজে একটি ফাইল বৈশিষ্ট্য সংলাপের স্ক্রিনশট

এবং আমি অবাক হই যে কোনও ফাইল কীভাবে বলতে পারে এটি 1641 সালে তৈরি করা হয়েছে? যতদূর আমি জানি, পিসিতে সময়টি 1 লা জানুয়ারী, 1970 এর পরে সেকেন্ডের সংখ্যার দ্বারা সংজ্ঞায়িত করা হয় that যদি সূচকটি বিভ্রান্ত হয় তবে আপনি 31 ডিসেম্বর, 1969 পেতে পারেন (সূচকটি সম্ভবত -1 বলে) তবে আমি এটায় স্ট্যাম্পড আছি আপাতদৃষ্টিতে এলোমেলো তারিখ, এটি আমেরিকা যুক্তরাষ্ট্রের এমনকি প্রতিষ্ঠার পূর্বাভাস দেয়।

সুতরাং কিভাবে একটি ফাইল তারিখ 1641 সালে দেওয়া যেতে পারে?

PS: তারিখগুলি ফরাসি হয়। ফ্যাভিয়ার ফেব্রুয়ারি হয়।


29
"যতদূর আমি জানি, পিসিতে সময়কে 1 লা জানুয়ারি, 1970 সাল থেকে সেকেন্ডের সংখ্যা দ্বারা সংজ্ঞায়িত করা হয়" " এমনকি এমন সিস্টেমে যেখানে এটি রয়েছে, 1970 এর আগের তারিখগুলি সহজেই সেই সংখ্যাটিকে ( ইউনিক্স টাইমস্ট্যাম্প হিসাবে পরিচিত ) নেতিবাচক করে তোলে by উদাহরণস্বরূপ, ইউনিক্স সময় -1000000000 1938-04-24 22:33:20 এর সাথে সম্পর্কিত।
মার্সেলম

1
@ মার্কসেল হ্যাঁ, তবে 321-বিট পূর্ণসংখ্যার সীমাবদ্ধ সীমাবদ্ধতার কারণে সর্বনিম্ন সম্ভাব্য তারিখ 1901 সালে রয়েছে।
slhck

14
@ এসএলএইচএইচকি: আমার মনে হয় মার্সেলম একটি -৪-বিট টাইমস্ট্যাম্প ধরেছিল, কারণ এটিই বর্তমান ইউনিক্স / লিনাক্স ফাইল সিস্টেম, কার্নেল এবং ব্যবহারকারী-স্পেস সফটওয়্যার ব্যবহার করে। সংজ্ঞাটির জন্য clock_gettime(2)ম্যান পৃষ্ঠাটি দেখুন struct timespec, যা statব্যবহারকারী-স্থান এবং কার্নেলের মধ্যে টাইমস্ট্যাম্পগুলি পাস করার জন্য এবং অন্যান্য সিস্টেম কলগুলি ব্যবহার করে। এটি time_tএকটি long tv_nsecসেকেন্ডে এবং একটি ন্যানোসেকেন্ড সহ স্ট্রাক্ট । -৪-বিট সিস্টেমে উভয়ই 64৪-বিট, তাই পুরো টাইমস্ট্যাম্পটি 128 বিট (16 বাইট)। (খুব বেশি তথ্যের জন্য দুঃখিত, আমি বহন করলাম।)
পিটার কর্ডেস

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

2
কিং লুই দ্বাদশ মাত্র পিএইচপি-র প্রতি রয়্যাল লাইনের প্রতিশ্রুতি প্রদর্শন করছিল?
জেসি স্লাইসার

উত্তর:


106

কেন 1600 এর দশকের তারিখ সম্ভব?

উইন্ডোজ ইউনিক্স সিস্টেমের মতো ফাইল সংশোধন টাইমস্ট্যাম্পগুলি সঞ্চয় করে না । উইন্ডোজ ডেভ সেন্টার অনুসারে (জোর দেওয়া খনি):

একটি ফাইল সময় হল একটি 64-বিট মান যা 100-ন্যানোসেকেন্ড অন্তরগুলির সংখ্যা উপস্থাপন করে যা জানুয়ারি 1, 1601 সমন্বিত ইউনিভার্সাল সময় (ইউটিসি) থেকে 12:00 এএম কেটে গেছে । অ্যাপ্লিকেশনগুলি ফাইলগুলি তৈরি, অ্যাক্সেস এবং লেখার সময় সিস্টেম ফাইল ফাইল রেকর্ড করে।

সুতরাং, এখানে একটি ভুল মান সেট করে, আপনি সহজেই 1600 এর থেকে তারিখগুলি পেতে পারেন।

অবশ্যই, অন্য একটি গুরুত্বপূর্ণ প্রশ্ন: এই মানটি কীভাবে সেট করা হয়েছিল? আসল তারিখটি কী? আমি মনে করি আপনি কখনই এটির সন্ধান করতে পারবেন না কারণ এটি ফাইল সিস্টেম ড্রাইভারের মধ্যে একটি গণনার ত্রুটি হতে পারে। অন্য একটি উত্তর অনুমান করে যে তারিখটি আসলে একটি ইউনিক্স টাইমস্ট্যাম্প যা উইন্ডোজ টাইমস্ট্যাম্প হিসাবে ব্যাখ্যা করা হয়, তবে সেগুলি প্রকৃতপক্ষে বিভিন্ন বিরতিতে (সেকেন্ড বনাম ন্যানোসেকেন্ডগুলি) গণনা করা হয়।

এটি কীভাবে 2038 বছরের সাথে সম্পর্কিত?

-৪-বিট ডেটা টাইপের ব্যবহারের অর্থ হ'ল উইন্ডোজ (সাধারনত) ২০৩৮ সালের যে সমস্যাটি সনাতন ইউনিক্স সিস্টেমগুলি দ্বারা প্রভাবিত হয় না , যেহেতু ইউনিক্স প্রাথমিকভাবে ৩২-বিট পূর্ণসংখ্যার ব্যবহার করে যা উইন্ডোজ যে 64৪-বিট পূর্ণসংখ্যার চেয়ে শীঘ্রই প্রবাহিত হয় হয়েছে। (এটি সেকেন্ডে ইউনিক্স এবং মাইক্রো / ন্যানোসেকেন্ডে উইন্ডোজ অপারেটিং সত্ত্বেও রয়েছে))

অবশ্যই 32-বিট প্রোগ্রামগুলি ব্যবহার করার সময় উইন্ডোজ এখনও প্রভাবিত হয় যা অবশ্যই ভিজ্যুয়াল স্টুডিওর পুরাতন সংস্করণগুলির সাথে সংকলিত ছিল।

নতুন ইউনিক্স অপারেটিং সিস্টেমগুলি ইতিমধ্যে ডেটা প্রকারটি 64 বিটে প্রসারিত করেছে, ফলে সমস্যাটি এড়ানো হচ্ছে। (প্রকৃতপক্ষে, যেহেতু ইউনিক্স টাইমস্ট্যাম্পগুলি সেকেন্ডে কাজ করে, নতুন মোড়কের তারিখটি এখন থেকে 292 বিলিয়ন বছর হবে))

সর্বাধিক তারিখটি কী সেট করা যায়?

কৌতূহলী ব্যক্তিদের জন্য - এটি কীভাবে গণনা করতে হবে তা এখানে:

  • 64-বিট পূর্ণসংখ্যা সম্ভব মান রয়েছে তা গণনা হয় 2 63 = 1 9223372036854775807 -
  • প্রতিটি টিক 100 ন্যানোসেকেন্ডগুলি উপস্থাপন করে যা 0.1 µs বা 0.0000001 s is
  • সর্বাধিক সময়সীমা হবে 9223372036854775807 ⨉ 0.0000001 s , তাই কয়েকশো বিলিয়ন সেকেন্ড।
  • এক ঘন্টা 3600 সেকেন্ড, এক দিন 86400 সেকেন্ড, এবং এক বছরে 365 দিন রয়েছে, তাই এক বছরে 86400 ⨉ 365 s = 31536000 গুলি রয়েছে। এটি অবশ্যই লিপ বছরগুলি, লিপ সেকেন্ডগুলিকে উপেক্ষা করে বা ভবিষ্যতের পোস্টপোক্যালপ্যাটিক শাসন ব্যবস্থাগুলি বাকী আর্থলিংসের উপর নির্ভর করতে পারে এমন কোনও ক্যালেন্ডার পরিবর্তন উপেক্ষা করে এটি কেবল গড়ে গড়ে।
  • 9223372036854775807 ⨉ 0.0000001 s / 31536000 s ≈ 29247 বছর
  • @corsiKaকীভাবে আমরা লাফ বছরগুলিকে বিয়োগ করতে পারি তা ব্যাখ্যা করে: 29247/365/4 ≈ 20
  • সুতরাং আপনার সর্বাধিক বছর 1601 + 29247 - 20 = 30828

কিছু লোকেরা আসলে এটি সেট করার চেষ্টা করেছে এবং একই বছর এসেছিল with


7
রেকর্ডের জন্য, ইউনিক্স (বা কমপক্ষে লিনাক্স) ইতিমধ্যে 38৪-বিট আর্কিটেকচারে কার্নেল / ফাইল সিস্টেমগুলির জন্য ২০৩৮ টি সমস্যার সমাধান করেছে যেখানে time_t64৪-বিট প্রকার রয়েছে, সুতরাং আশা করি অ্যাপ্লিকেশনগুলি time_tএকটি পূর্ণসংখ্যার প্রকারের পরিবর্তে এখনও ব্যবহার করবে যা এখনও 32-বিট এবং টাইমস্ট্যাম্পগুলি কেটে ফেলবে ... যাইহোক, যদি কেউ সমস্যার স্থিতি সম্পর্কে আগ্রহী হন, তবে বেশিরভাগ ক্ষেত্রে 32-বিট উত্তরাধিকার ব্যতীত এটি সমাধান করা হয়। IDK যদি 32-বিট এআরএম 2038 এ এখনও প্রাসঙ্গিক হবে তবে এটি কমপক্ষে ABI পরিবর্তনকে বাধ্য করবে। ইউনিক্স বিশ্বে 32-বিট x86 বেশ চলে গেছে; এটি কেবল উইন্ডোজ যেখানে 32-বিট কোড এখনও সাধারণ।
পিটার কর্ডেস

মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
যাত্রামন গীক

1
ভিএমএস সময় হ'ল " একটি 64-বিট মান যা 100-ন্যানোসেকেন্ড অন্তরগুলির সংখ্যা উপস্থাপন করে যা 17-নভেম্বর-1858 সাল থেকে কেটে গেছে "। :)
রন জন 14

30 বছরের বছর ... অবাক করার মতো কম
জন ডিভোরাক

2
@ ডোনাল্ডডাক ব্লগস.এমএসডিএন.মাইক্রোসফট.ল্ডনেউথিং / ২০০৯০৩০6-০০ /? p = 18913 এবং আরও প্রায় 1600 মানুষ এখনও আরও জটিল হওয়ার আগে জুলিয়ান ক্যালেন্ডারের কোনও তারিখের প্রতিনিধিত্ব করছেন।
ম্যাকিয়েজ পাইচোটকা

16

আপনি যদি কিছু অনুমান করা সম্পর্কে খুব খারাপ না বোধ করেন তবে আমাকে একটি ব্যাখ্যা দেওয়ার সুযোগ দিন। এবং আমার অর্থ এই নয় যে "কেউ অর্থহীনতার জন্য মান সেট করে", এটি অবশ্যই সর্বদা সম্ভব :)

ইউনিক্স সময় সাধারণত ১৯ 1970০ সাল থেকে সেকেন্ডের সংখ্যা ব্যবহার করে the অন্যদিকে উইন্ডোজ তার শুরুর বছর হিসাবে 1601 ব্যবহার করে। সুতরাং যদি আমরা ধরে নিই (এবং এটি একটি বড় অনুমান!) যে সমস্যাটি দুটি সময়ের মধ্যে ভুল রূপান্তর, তবে আমরা কল্পনা করতে পারি যে যে তারিখটি উপস্থাপিত হওয়ার কথা ছিল তা আসলে ২০১১ সালের (১৯ 1970০ + ৪১) কিছু সময় ভুলভাবে রূপান্তরিত হয়েছিল got থেকে 1640 (1601 + 41) । সম্পাদনা: আসলে, আমি উইন্ডোজ শুরুর বছরে একটি ভুল করেছি। এটি সম্ভব যে আসল সৃষ্টির সময়টি ২০১০ সালে ছিল, বা এর সাথে আরও একটি ত্রুটি জড়িত ছিল (সফটওয়্যারে একের পর এক ত্রুটিগুলি খুব সাধারণ: ডি)।

এই বছরটি প্রশ্নযুক্ত ফাইলের সাথে যুক্ত ট্র্যাকিংয়ের তারিখগুলির একটি হতে পারে বলে মনে করা হয়, আমি মনে করি এটি একটি খুব প্রশংসনীয় ব্যাখ্যা :)


সুতরাং এটি হতে পারে যে তারিখটি ইউনিক্সে লেখা হয়েছিল, তবে ইউটিসিতে পড়ে?
ফ্রেডি 31

উইন্ডোজ 1600 নয় 1601 ব্যবহার করে
জোয় ২

3
এই তত্ত্বের কয়েকটি সমস্যা: স্ক্রিনশট অনুসারে, ফাইলটি শেষবার অ্যাক্সেস হওয়ার 11 দিন পরে তৈরি করা হত। এছাড়াও, উইন্ডোজ টাইমস্ট্যাম্পগুলি 100 ন্যানোসেকেন্ডে গণনা করা হয়, যখন ইউনিক্স সময়টি সেকেন্ডে হয়।
নোলোনার

2
@ জো উগ, আমার ভুল এটি প্রথম নজরে তুলনায় ফিটকে আরও খারাপ করে তোলে :) আমি মনে করি একই বুনিয়াদী ধারণাটি এখনও কাজ করা উচিত, তবে আমি ধরে নিয়েছিলাম এর চেয়ে বেশি ত্রুটিযুক্ত থাকতে পারে। অথবা, অবশ্যই, ফাইলটি ২০১১ সালে তৈরি হয়েছিল, ২০১১ সালে নয়
লুয়ান

2
উইন্ডোস যুগ এবং প্রদর্শিত ফাইলের তারিখ / সময়কালের মধ্যে সেকেন্ডস 1.266.705.294 । ইউনিক্স যুগের সাথে যুক্ত হওয়ার পরে, এই ফলন হয় 2010-02-20 23:34:54 সিইএসটি , যা শনিবার ছিল।
এসকিউবি

5

যেমনটি অন্যেরা লিখেছেন, উইন্ডোজ যুগটি 1601-01-01 00:00 এ রয়েছে

সেই যুগের সময় এবং ফাইলটাইমের মাঝে প্রদর্শিত সেকেন্ডের সংখ্যাটি 1.266.705.294
যদি আমরা এটি ইউনিক্সের যুগে যুক্ত করি তবে আমরা শনিবার 2010-02-20 23:34:54 সিইএসটি পৌঁছেছি । এটি সর্বশেষ অ্যাক্সেসের তারিখের প্রায় এক বছর পূর্বে, যা এটি কিছুটা প্রশংসনীয় করে তোলে। সুতরাং এটি কোনও ইউনিক্স টাইমস্ট্যাম্প ভুল যুগের বিরুদ্ধে ব্যাখ্যা করা হতে পারে।


আশ্চর্যের সাথে যথেষ্ট, .NET যুগটি 0001-01-01 00:00 ইউটিসি (যা 1600 বছর আগে)। দেখুন msdn.microsoft.com/en-us/library/...
Nayuki

2

এই ধরণের প্রশ্নগুলির জন্য যথারীতি, র‌্যামন্ড চেনের ব্লগের "উইন 32 মহাকাশটি কেন জানুয়ারী 1, 1601?" থেকে একটি উত্তর আছে মার্চ 6, 2009 থেকে প্রবেশ:

FILETIMEগঠন 1 জানুয়ারি থেকে 100 ন্যানোসেকেন্ড অন্তর আকারে সময় রেকর্ড, 1601. কেন এই তারিখের মনোনীত করা হয়েছিল?

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

ড্যাভ ক্যাটলার এর সত্যতা নিশ্চিত করে আমার কাছে ইমেল রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.