1/1/1970 সাল থেকে দিন গণনা করুন


10

আপনি কীভাবে 1/1/1970 থেকে দিনের সংখ্যা গণনা করতে পারেন? এটি ওপেনলডিপ-শ্যাডোলেস্ট চেঞ্জ অ্যাট্রিবিউট আপডেট করার জন্য ।

লিনাক্স ডেট কমান্ড ব্যবহার করে এটি করার কোনও উপায় আছে কি ?


বাশ এবং সর্বাধিক আধুনিক বোর্ন থেকে প্রাপ্ত শেলগুলিতে পাঠযোগ্যতা এবং অন্যান্য কারণে$() ব্যাকটিক্সের চেয়ে বেশি পছন্দ করা হয় । echo $(( $(date ...) / 86400 ))
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

এখনও 2000 নেই ... কেউ শিরোনামটি সম্পাদনা করতে এবং ঠিক করতে পারে :-)
রিং Ø

উত্তর:


20

রিং0 আমাকে কয়েক সেকেন্ডের ব্যবধানে হারিয়ে ফেলল, তবে পুরো আদেশটি হ'ল:

echo $(($(date --utc --date "$1" +%s)/86400))

এটি ইউটিসি সময় অনুসারে যায়। ফলাফল:

root@hostname:~# echo $((`date --utc --date "$1" +%s`/86400))
14984

ওল্ফ্রামআল্ফার সাথে একটি দ্রুত চেক দেখায় যে এটি সঠিক মান।


1
লিপ সেকেন্ডের কী হবে? :)
নেটভোপ

1
@ নেটভোপ অতিরিক্ত লিপ সেকেন্ডের পরে, ইউনিক্স সময়টি আবার একটি দ্বারা পুনরায় সেট করা হয়েছে। সুতরাং প্রতিটি দিন ঠিক 86400 ইউনিক্স সেকেন্ড যুক্ত করে। 00: 59: 60 এবং 1999-01-01T00: 00 যাইহোক, UNIX সময় 915148800 উভয় ইউটিসি 1998-12-31T23 জন্য দাঁড়ানো পারে en.wikipedia.org/wiki/Unix_time#Leap_seconds
Debilski

9

dateকমান্ড আপনাকে যেহেতু সেকেন্ডের সংখ্যা দিতে পারেন 1970-01-01 00:00:00 UTC

  date +"%s"

3600*24দিনের সংখ্যা (ইউটিসি) পাওয়ার জন্য আপনি ফলাফলটি ভাগ করতে পারেন ।

উদাহরণস্বরূপ বাশ মধ্যে

  x=`date +"%s"` ; echo $(( $x / 3600 / 24 ))

দিনের সংখ্যা প্রদর্শন করতে।


9

আমি মনে করি এটি সহজতম পদ্ধতি:

expr $(date +%s) / 86400

কেন এই নিম্নমানের? এটি সেরা এবং সংক্ষিপ্ত এবং সহজ উত্তর
টম কোরলিস

1

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

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

$ date +%z
-0600

। । । কোনও গণনায় সরাসরি ব্যবহারযোগ্য নয়, ডান সংশোধকগুলি আমরা যা চাই তা প্রদান করবে:

$ date +%-:::z
-6

এটিকে সাধারণ সেকেন্ড / ঘন্টা / দিনের রূপান্তরগুলির সাথে একত্রে রাখুন এবং আমি বিশ্বাস করি যে নিম্নলিখিত 1/1/1970 থেকে দিনগুলি আউটপুট করা উচিত, 1/1/1970 নিজেই দিন শূন্য এবং স্থানীয় সময় মধ্যরাতে মূল্য বৃদ্ধি করে:

echo $(( ( $(date +"%s + ( %-:::z * 3600)") ) / 86400 ))

এই সাধারণ গণনাটি এমন সময় অঞ্চলগুলির জন্য কাজ করবে না যা পুরো সময় ধরে ইউটিসি থেকে অফসেট হয় না (যেমন, ভারত, টিজেড = এশিয়া / কলকাতা), যেহেতু উত্পাদিত "+5: 30" date +%-:::z"অভিব্যক্তিতে অবৈধ চরিত্র " তৈরি করবে যখন উপরের বিবৃতিতে ব্যবহৃত হয়।

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