লস অ্যাঞ্জেলেসে বর্তমান সময় 18:05। তবে আমি যখন দৌড়ে যাই TZ=UTC-8 date --iso=ns
, তখন আমি পাই:
2013-12-07T10:05:37,788173835+0800
তারিখের ইউটিলিটি আমাকে বলে যে সময়টি 10:05, এবং এমনকি এটি এটি ইউটিসি +8 হিসাবে রিপোর্ট করছে। কেন?
লস অ্যাঞ্জেলেসে বর্তমান সময় 18:05। তবে আমি যখন দৌড়ে যাই TZ=UTC-8 date --iso=ns
, তখন আমি পাই:
2013-12-07T10:05:37,788173835+0800
তারিখের ইউটিলিটি আমাকে বলে যে সময়টি 10:05, এবং এমনকি এটি এটি ইউটিসি +8 হিসাবে রিপোর্ট করছে। কেন?
উত্তর:
কারণটি হ'ল পসিক্স সময় অঞ্চলTZ=UTC-8
হিসাবে ব্যাখ্যা করা হয় । পসিক্স টাইমজোন ফর্ম্যাটে, 3 টি অক্ষর হ'ল টাইমজোন সংক্ষিপ্তকরণ (যা স্বেচ্ছাসেবী) এবং নম্বরটি টাইমজোনটি ইউটিসির পিছনে যে ঘন্টা রয়েছে তার সংখ্যা । সুতরাং একটি টাইমজোন সংক্ষেপিত "ইউটিসি" সংক্ষেপিত যা প্রকৃত ইউটিসি, বা ইউটিসি + 8 ঘন্টা পিছনে −8 ঘন্টা পিছনে।UTC-8
(এটি সেভাবে কাজ করে কারণ ইউনিক্স মার্কিন যুক্তরাষ্ট্রে উন্নত হয়েছিল, যা ইউটিসির পিছনে রয়েছে This এই ফর্ম্যাটটি মার্কিন সময়সীমাগুলি EST5, CST6, ইত্যাদি হিসাবে উপস্থাপনের অনুমতি দেয়)
আপনি এই উদাহরণগুলির দ্বারা যা ঘটছে তা দেখতে পাবেন:
$ TZ=UTC-8 date +'%Z %z'
UTC +0800
$ TZ=UTC8 date +'%Z %z'
UTC -0800
$ TZ=FOO-8 date +'%Z %z'
FOO +0800
আইএসও -0800
টাইমজোন ফর্ম্যাটটি বিপরীতমুখী পদ্ধতি গ্রহণ করে, -
জোনটি ইউটিসির পিছনে রয়েছে এবং +
জোনটি ইউটিসির চেয়ে এগিয়ে রয়েছে তা নির্দেশ করে।
TZ=America/Los_Angeles
। আপনি ভুলে যাচ্ছেন যে প্যাসিফিক সময়টি দিনের আলো সংরক্ষণের সময় -7 হয়।
TZ=:America/Los_Angeles
। কোলনটি নির্দেশ করে যে এটি একটি ওলসন টাইমজোন ফাইল। এবং অন্য একটি মন্তব্যে তিনি উল্লেখ করেছিলেন যে তিনি দিবালোকের সময় সাশ্রয় করার সময়কে উপেক্ষা করতে চান, যা তা করবে না।
EST-5
CST-6
।
আপনি যখনই টাইমজোনটি +/- 00:00 বিন্যাসে নির্দিষ্ট করেন, আপনি একটি অফসেট নির্দিষ্ট করে থাকেন , আসল টাইমজোনটি নয়। GNU libc
ডকুমেন্টেশন থেকে (যা পসিক্স মান অনুসরণ করে):
অফসেট একটি সমন্বিত ইউনিভার্সাল সময় মান পেতে আপনাকে স্থানীয় সময় যুক্ত করতে হবে এমন সময় মান নির্দিষ্ট করে। এতে [+ | -] এইচএইচ [[মিমি [: এসএস]] এর মতো বাক্য গঠন রয়েছে। স্থানীয় সময় অঞ্চলটি প্রাইম মেরিডিয়ান এর পশ্চিমে এবং এটি পূর্বে থাকলে negativeণাত্মক হয় positive ঘন্টাটি 0 এবং 23 এর মধ্যে এবং মিনিট এবং সেকেন্ড 0 এবং 59 এর মধ্যে হতে হবে।
এ কারণেই এটি আপনার প্রত্যাশার বিপরীত বলে মনে হচ্ছে।
Why?
কারণ পসিক্স এটির প্রয়োজন ।
যদি '-' এর আগে হয়, টাইমজোনটি প্রধানমন্ত্রী মেরিডিয়ান এর পূর্বে হবে; অন্যথায়, এটি পশ্চিমে হবে (যা +চ্ছিক '+' পূর্ববর্তী দ্বারা নির্দেশিত হতে পারে)।
সুতরাং, এটি [1] এর নিকটে সময় দেবে Los Angeles
(সময় অঞ্চল পাঠ্যের জন্য কোনও 3 টি লেটার লেবেল সহ):
$ TZ=ANY8 date "+%Y-%m-%d %H:%M:%S %Z%z"
2016-04-23 10:47:12 ANY-0800
$ TZ=GMT+8 date "+%Y-%m-%d %H:%M:%S %Z%z"
2016-04-23 10:47:12 GMT-0800
এবং এটি কাছাকাছি সময় দিতে হবে Shanghai, China
বা Perth, Australia
:
$ TZ=ANY-8 date "+%Y-%m-%d %H:%M:%S %Z%z"
2016-04-24 02:47:12 ANY+0800
$ TZ=CST-8 date "+%Y-%m-%d %H:%M:%S %Z%z"
2016-04-23 02:47:12 CST+0800
[1] কাছাকাছি কারণ সেখানে কিছু ডিএসটি (দিবালোক সংরক্ষণের সময়) কার্যকর হতে পারে যা প্রকৃত "স্থানীয় সময়" এ স্থানান্তর করে।
বিকল্প পদ্ধতি হিসাবে zdump
আপনি অন্যান্য সময় অঞ্চল + অফসেটগুলিতে বর্তমান সময়টি প্রদর্শন করতে কমান্ডটি ব্যবহার করতে পারেন ।
জেডডাম্প কমান্ড লাইনে নামের প্রতিটি জোনেনেমে বর্তমান সময় মুদ্রণ করে।
একই বিধি সময় অঞ্চলগুলির সাথে প্রযোজ্য; পূর্বদিকে "এগিয়ে" থাকাকালীন প্রধান মেরিডিয়ান পশ্চিমে "পিছনে" রয়েছে।
d zdump PST PST শনিবার 7 ডিসেম্বর 03:25:27 2013 পিএসটি
আমরা এই স্ক্রিপ্টটি বেশ কয়েকটি সময় অঞ্চল + অফসেটগুলি দেখানোর জন্য তৈরি করেছি যা আমরা ব্যবহার করতে আগ্রহী zdump
এবং date
তাই আমরা সেগুলি তুলনা করতে পারি।
$ cat cmd.bash
#!/bin/bash
printf "\ndate: %s\n\n" "$(date)"
for tz in EST PST PST+8 PST-8 UTC UTC+8 UTC-8; do
echo "-- timezone $tz"
printf "zdump: %s\n" "$(zdump $tz)"
printf "date: %s\n" "$(TZ=$tz date +'%a %b %d %T %Y - (%Z %z)')"
echo ""
done
তারপরে আপনি এটি চালানোর সময় আপনি এর সাথে তুলনা দেখতে zdump
পাবেন date
:
$ ./cmd.bash
date: Sat Dec 7 02:59:05 EST 2013
-- timezone EST
zdump: EST Sat Dec 7 02:59:05 2013 EST
date: Sat Dec 07 02:59:05 2013 - (EST -0500)
-- timezone PST
zdump: PST Sat Dec 7 07:59:05 2013 PST
date: Sat Dec 07 07:59:05 2013 - (PST +0000)
-- timezone PST+8
zdump: PST+8 Fri Dec 6 23:59:05 2013 PST
date: Fri Dec 06 23:59:05 2013 - (PST -0800)
-- timezone PST-8
zdump: PST-8 Sat Dec 7 15:59:05 2013 PST
date: Sat Dec 07 15:59:05 2013 - (PST +0800)
-- timezone UTC
zdump: UTC Sat Dec 7 07:59:05 2013 UTC
date: Sat Dec 07 07:59:05 2013 - (UTC +0000)
-- timezone UTC+8
zdump: UTC+8 Fri Dec 6 23:59:05 2013 UTC
date: Fri Dec 06 23:59:05 2013 - (UTC -0800)
-- timezone UTC-8
zdump: UTC-8 Sat Dec 7 15:59:05 2013 UTC
date: Sat Dec 07 15:59:05 2013 - (UTC +0800)
TZ=PST+8 date
। ধন্যবাদ। আমি এই ব্যাখ্যাটিও এর নীচে পেয়েছিman timezone
: "স্ট্যান্ড স্ট্রিং টাইমজোনটির নাম নির্দিষ্ট করে এবং অবশ্যই তিন বা ততোধিক বর্ণানুক্রমিক অক্ষর হওয়া উচিত The ইউটিসি)। স্থানীয় সময় অঞ্চলটি প্রধান মেরিডিয়ান এর পশ্চিমে এবং পূর্বদিকে নেতিবাচক হলে অফসেটটি ইতিবাচক।