क्या यह जांचने का कोई तरीका है कि मैं अभी किस समय क्षेत्र में लिनक्स पर हूँ?
क्या यह जांचने का कोई तरीका है कि मैं अभी किस समय क्षेत्र में लिनक्स पर हूँ?
जवाबों:
आमतौर पर, TZ
पर्यावरण चर आपको कुछ उपयोगी बताएगा। हालांकि, यह इस तरह के रूप में भी कार्य का उपयोग करने के लिए सबसे अच्छा है mktime()
और localtime()
के बीच परिवर्तित करने के लिए time_t
और एक स्थानीय समय क्षेत्र प्रतिनिधित्व। अर्थात्, स्वयं रूपांतरण करने का प्रयास न करें ।
date
।
echo $TZ
मेरे लिए कुछ भी नहीं है।
यदि आप कंसोल से मतलब रखते हैं, तो टाइप करें:
date +%Z
यदि आप संख्यात्मक समयक्षेत्र चाहते हैं:
date +'%:z %Z'
नमूना उत्पादन:
-05:00 EST
:z EST
date
। बिज़ीबॉक्स संस्करण मेरे मामले में कुछ गैर-कामुक, "%: z CEST" प्रिंट करता है।
linux
ubuntu-10.04
मैं इसके बजाय "यूएस / पूर्वी" या "यूरोप / लंदन" रूप में टाइमज़ोन खोजना चाहता था। आप इसमें पा सकते हैं:
ZONE="US/Eastern"
में / etc / sysconfig / घड़ी मेंया आप कोशिश कर सकते हैं और / usr / share / zoneinfo के तहत फ़ाइलों में से किसी एक को स्थानीय मिलान कर सकते हैं; कष्टप्रद रूप से यह एक सिम्लिंक नहीं लगता है, लेकिन आप उदा
cd / usr / share / zoneinfo
* -type f -exec sh -c "diff -q / etc / localtime '{}'> / dev / null && echo {}" \ "खोजें;
मिलान फ़ाइलें खोजने के लिए - ऐसा करने के लिए शायद बेहतर तरीके हैं, लेकिन यह काम करता है। कई मैच होंगे।
find /usr/share/zoneinfo/ -type f| xargs md5sum | grep $(md5sum /etc/localtime | cut -d' ' -f1)
Ubuntu के लिए यह कोशिश:
$ cat /etc/timezone
नमूना उत्पादन:
Asia/Kolkata
अन्य डिस्ट्रो के लिए संदर्भ: https://unix.stackexchange.com/questions/110522/timezone-setting-in-uxux
timedatectl set-timezone
अपडेट नहीं होता है/etc/timezone
। समाधान के आधार पर इस उत्तर को देखें /etc/localtime
।
कभी-कभी आप date %Z
उदाहरण के लिए लघु रूप के बजाय विहित समयक्षेत्र की तलाश में हो सकते हैं US/Eastern
। timedatectl
उदाहरण के लिए फेडोरा जैसी प्रणालियों पर timedatectl
, वर्तमान क्षेत्र सहित बहुत सी उपयोगी सूचनाओं का उत्पादन करता है:
# timedatectl
Local time: Tue 2016-09-13 17:10:26 EDT
Universal time: Tue 2016-09-13 21:10:26 UTC
RTC time: Tue 2016-09-13 21:10:26
Time zone: US/Eastern (EDT, -0400)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
दुर्भाग्य से, एक आदेश के रूप में timedatectl
लेता है set-timezone
, लेकिन इसके अनुरूप नहीं है get-timezone
। इसे निम्नानुसार पार्स करें:
# timedatectl status | grep "zone" | sed -e 's/^[ ]*Time zone: \(.*\) (.*)$/\1/g'`
US/Eastern
समय क्षेत्र के लिए, आप जियोलोकेशन का उपयोग कर सकते हैं:
$ curl https://ipapi.co/timezone
America/Chicago
या:
$ curl http://ip-api.com/line?fields=timezone
America/Chicago
/sbin/hwclock --systohc [--utc]
हार्डवेयर क्लॉक सेट करने के लिए टाइप करें।लिनक्स कर्नेल हमेशा 1 जनवरी 1970 UTC की मध्यरात्रि से सेकंड की संख्या के रूप में समय की गणना करता है और इसकी गणना करता है कि आपकी हार्डवेयर घड़ी UTC के रूप में संग्रहीत है या नहीं। आपके स्थानीय समय के रूपांतरण रन-टाइम पर किए जाते हैं। इसके बारे में एक साफ बात यह है कि यदि कोई आपके कंप्यूटर का उपयोग किसी अलग टाइमज़ोन से कर रहा है, तो वे TZ वातावरण चर सेट कर सकते हैं और सभी तिथियां और समय उनके टाइमज़ोन के लिए सही दिखाई देंगे।
यदि 1 जनवरी 1970 से UTC के बाद से सेकंड की संख्या को एक हस्ताक्षरित 32-बिट पूर्णांक (जैसा कि आपके लिनक्स / इंटेल सिस्टम पर है) के रूप में संग्रहीत किया जाता है, तो आपकी घड़ी वर्ष 2038 पर कुछ समय के लिए काम करना बंद कर देगी। लिनक्स में कोई अंतर्निहित Y2K समस्या नहीं है , लेकिन यह एक वर्ष 2038 समस्या है। उम्मीद है कि हम सभी तब तक 64-बिट सिस्टम पर लिनक्स चला रहे होंगे। 64-बिट पूर्णांक हमारी घड़ियों को वर्ष 292271 मिलियन तक लगभग अच्छी तरह से चालू रखेंगे।
TZ या दिनांक का उपयोग करना RELIABLE नहीं है क्योंकि यह आपको USER का समय क्षेत्र बताता है, डिफ़ॉल्ट सिस्टम समयक्षेत्र नहीं।
डिफ़ॉल्ट सिस्टम टाइमज़ोन को / etc / timezone में संग्रहीत किया जाता है (जो कि समय-समय पर विशिष्ट डेटा टाइमज़ोन के लिए एक प्रतीकात्मक लिंक होता है)। यदि आपके पास / etc / timezone नहीं है, तो / etc / localtime को देखें। आम तौर पर वह "सर्वर का" टाइमज़ोन है। / etc / स्थानीय समय अक्सर / usr / शेयर / ज़ोनफो में टाइमज़ोन फ़ाइल के लिए एक सहानुभूति है। सही टाइमज़ोन फ़ाइल का वह रास्ता अक्सर आपको भूगोल की जानकारी भी देगा।
नए लाइनक्स में "टाइमटेक्स्टल" होता है जो आपको कमांड चलाने पर सूचनाओं के टन देता है।
(एक साइड-नोड के रूप में, यदि आपके पास एक प्राचीन प्रणाली है जो अभी भी OLD हार्ड-कोडेड टाइमज़ोन का उपयोग करती है, तो आप शायद इस पर एक आधुनिक टाइमज़ोन फ़ाइल की प्रतिलिपि बना सकते हैं और यह काम करेगा। बदलते समय-निर्धारण को हल करने के लिए मुझे कई बार ऐसा करना पड़ा है। पुराने उपकरणों पर)।
कभी-कभी timedatectl set-timezone
अपडेट नहीं होता है/etc/timezone
, इसलिए सिम्लिंक को /etc/timezone
इंगित करने वाली फ़ाइल के नाम से tiemzone प्राप्त करना सबसे अच्छा है:
#!/bin/bash
set -euo pipefail
if filename=$(readlink /etc/localtime); then
# /etc/localtime is a symlink as expected
timezone=${filename#*zoneinfo/}
if [[ $timezone = "$filename" || ! $timezone =~ ^[^/]+/[^/]+$ ]]; then
# not pointing to expected location or not Region/City
>&2 echo "$filename points to an unexpected location"
exit 1
fi
echo "$timezone"
else # compare files by contents
# https://stackoverflow.com/questions/12521114/getting-the-canonical-time-zone-name-in-shell-script#comment88637393_12523283
find /usr/share/zoneinfo -type f ! -regex ".*/Etc/.*" -exec \
cmp -s {} /etc/localtime \; -print | sed -e 's@.*/zoneinfo/@@' | head -n1
fi
संदर्भ: इस उत्तर में ।
आप दिनांक और समयावधि समवर्ती दिखा सकते हैं:
date +'%d/%m/%Y %H:%M:%S [%:z %Z]'