लिनक्स में किस समयजोन की जाँच करें?


जवाबों:


19

आमतौर पर, TZपर्यावरण चर आपको कुछ उपयोगी बताएगा। हालांकि, यह इस तरह के रूप में भी कार्य का उपयोग करने के लिए सबसे अच्छा है mktime()और localtime()के बीच परिवर्तित करने के लिए time_tऔर एक स्थानीय समय क्षेत्र प्रतिनिधित्व। अर्थात्, स्वयं रूपांतरण करने का प्रयास न करें


2
क्या कोई कमांड है जो उपयोगकर्ता को समय-सीमा के बारे में बताता है?

26
ज़रूर बताइएगा date
ग्रेग हेविगेल

मेरे पास सर्वर के दो उदाहरण हैं, अगर मैं दोनों सर्वर में "दिनांक" कमांड देता हूं तो यह अलग-अलग समय दिखाता है। दोनों सर्वर के लिए समय क्षेत्र IST, एक सर्वर का समय है: Mon Jul 11 ​​10:39:31 IST 2011 और अन्य सर्वर Mon Jul 11 ​​10:35:31 IST 2011 .. 4 मिनट का अंतर है

8
सटीक पैंगोलिन पर echo $TZमेरे लिए कुछ भी नहीं है।
इयान सैमुअल मैकलीन एल्डर

3
@GregHewgill आपका उत्तर पहली नजर में मददगार नहीं है। कृपया अपना उत्तर संपादित करने पर विचार करें। नीचे दिया गया सबसे अधिक मतदान वाला उत्तर देखें। मैं आपके उत्तर को अभी के लिए दरकिनार कर दूंगा। इसके अलावा मेरी मशीनों पर डिफ़ॉल्ट रूप से कोई TZ env नहीं है।
therealmarv

244

यदि आप कंसोल से मतलब रखते हैं, तो टाइप करें:

date +%Z

2
अच्छा, अच्छा काम करता है।
सिल्वर मून

15
इसका स्वीकृत उत्तर होना चाहिए
कालेंजी

अच्छा बिंदु ... उस प्रभाव का उत्तर बदल गया
रसमान

और उबंटू में कमांड लाइन से टाइमजोन सेट करने के लिए, निम्न लिंक ऐसा करने के लिए तुच्छ, 1-लाइन कमांड प्रदान करता है: askubuntu.com/a/524362/182454
डैन निसेनबौम

यह +07मेरे लिए देता है। प्राप्त करने के लिए Region/Cityएक Debian / आर्क आधारित लिनक्स पर, देखने के इस जवाब
टॉम हेल

54

यदि आप संख्यात्मक समयक्षेत्र चाहते हैं:

date +'%:z %Z'

नमूना उत्पादन:

-05:00 EST

7
OS X पर यह आउटपुट:z EST
संदिग्ध


1
अधिक सटीक रूप से, यह जीएनयू पर लागू होता है date। बिज़ीबॉक्स संस्करण मेरे मामले में कुछ गैर-कामुक, "%: z CEST" प्रिंट करता है।
लीओ लैम

हालाँकि, दिनांक +% z OS X पर ठीक काम करता है। मेरा सुझाव है कि आप उत्तर को संशोधित करें।
नील मैय्यू

1
हाय, @NeilMayhew धन्यवाद! हम्म ... लेकिन सवाल के टैग हैंlinux ubuntu-10.04
पॉल वर्गास

24

मैं इसके बजाय "यूएस / पूर्वी" या "यूरोप / लंदन" रूप में टाइमज़ोन खोजना चाहता था। आप इसमें पा सकते हैं:

  • / etc / टाइमज़ोन (उबंटू और रेड हैट पर मौजूद है; लेकिन उदाहरण के लिए अमेज़न लिनक्स)
  • (Red Hat शैली प्रणालियों पर) के रूप ZONE="US/Eastern"में / etc / sysconfig / घड़ी में
  • या आप कोशिश कर सकते हैं और / usr / share / zoneinfo के तहत फ़ाइलों में से किसी एक को स्थानीय मिलान कर सकते हैं; कष्टप्रद रूप से यह एक सिम्लिंक नहीं लगता है, लेकिन आप उदा

    cd / usr / share / zoneinfo
    * -type f -exec sh -c "diff -q / etc / localtime '{}'> / dev / null && echo {}" \ "खोजें;

    मिलान फ़ाइलें खोजने के लिए - ऐसा करने के लिए शायद बेहतर तरीके हैं, लेकिन यह काम करता है। कई मैच होंगे।


4
find /usr/share/zoneinfo/ -type f| xargs md5sum | grep $(md5sum /etc/localtime | cut -d' ' -f1)
१४:२५

11

Ubuntu के लिए यह कोशिश:

$ cat /etc/timezone

नमूना उत्पादन:

Asia/Kolkata

अन्य डिस्ट्रो के लिए संदर्भ: https://unix.stackexchange.com/questions/110522/timezone-setting-in-uxux


कभी-कभी timedatectl set-timezoneअपडेट नहीं होता है/etc/timezone । समाधान के आधार पर इस उत्तर को देखें /etc/localtime
टॉम हेल

6

कभी-कभी आप date %Zउदाहरण के लिए लघु रूप के बजाय विहित समयक्षेत्र की तलाश में हो सकते हैं US/Easterntimedatectlउदाहरण के लिए फेडोरा जैसी प्रणालियों पर 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

4
$ strings /etc/localtime | tail -n 1
MST7MDT,M3.2.0,M11.1.0

इसलिए मैं माउंटेन टाइम पर हूं। यद्यपि पर्यावरण चर या सिर्फ तारीख कमांड आउटपुट का उपयोग करने के बारे में ऊपर सलाह देना कभी-कभी बेहतर काम करता है, इस पर निर्भर करता है कि आप इसका उपयोग कैसे करना चाहते हैं।



2
  • / etc / sysconfig / घड़ी सेट करता है कि हार्डवेयर घड़ी UTC या स्थानीय समय के रूप में संग्रहीत है या नहीं।
  • अपने टाइमज़ोन को सेट करने के लिए सिमलिंक / आदि / स्थानीय / से / usr / शेयर / ज़ोनफो / ...।
  • /sbin/hwclock --systohc [--utc]हार्डवेयर क्लॉक सेट करने के लिए टाइप करें।

लिनक्स कर्नेल हमेशा 1 जनवरी 1970 UTC की मध्यरात्रि से सेकंड की संख्या के रूप में समय की गणना करता है और इसकी गणना करता है कि आपकी हार्डवेयर घड़ी UTC के रूप में संग्रहीत है या नहीं। आपके स्थानीय समय के रूपांतरण रन-टाइम पर किए जाते हैं। इसके बारे में एक साफ बात यह है कि यदि कोई आपके कंप्यूटर का उपयोग किसी अलग टाइमज़ोन से कर रहा है, तो वे TZ वातावरण चर सेट कर सकते हैं और सभी तिथियां और समय उनके टाइमज़ोन के लिए सही दिखाई देंगे।

यदि 1 जनवरी 1970 से UTC के बाद से सेकंड की संख्या को एक हस्ताक्षरित 32-बिट पूर्णांक (जैसा कि आपके लिनक्स / इंटेल सिस्टम पर है) के रूप में संग्रहीत किया जाता है, तो आपकी घड़ी वर्ष 2038 पर कुछ समय के लिए काम करना बंद कर देगी। लिनक्स में कोई अंतर्निहित Y2K समस्या नहीं है , लेकिन यह एक वर्ष 2038 समस्या है। उम्मीद है कि हम सभी तब तक 64-बिट सिस्टम पर लिनक्स चला रहे होंगे। 64-बिट पूर्णांक हमारी घड़ियों को वर्ष 292271 मिलियन तक लगभग अच्छी तरह से चालू रखेंगे।


1

समाधान के एक जोड़े:

date +"%Z %z"
timedatectl | grep "Time zone"
cat /etc/timezone

मुझे दिया (क्रमशः):

UTC +0000
Time zone: Etc/UTC (UTC, +0000)
Etc/UTC

मेरा कंप्यूटर UTC पर है।


0

TZ या दिनांक का उपयोग करना RELIABLE नहीं है क्योंकि यह आपको USER का समय क्षेत्र बताता है, डिफ़ॉल्ट सिस्टम समयक्षेत्र नहीं।

डिफ़ॉल्ट सिस्टम टाइमज़ोन को / etc / timezone में संग्रहीत किया जाता है (जो कि समय-समय पर विशिष्ट डेटा टाइमज़ोन के लिए एक प्रतीकात्मक लिंक होता है)। यदि आपके पास / etc / timezone नहीं है, तो / etc / localtime को देखें। आम तौर पर वह "सर्वर का" टाइमज़ोन है। / etc / स्थानीय समय अक्सर / usr / शेयर / ज़ोनफो में टाइमज़ोन फ़ाइल के लिए एक सहानुभूति है। सही टाइमज़ोन फ़ाइल का वह रास्ता अक्सर आपको भूगोल की जानकारी भी देगा।

नए लाइनक्स में "टाइमटेक्स्टल" होता है जो आपको कमांड चलाने पर सूचनाओं के टन देता है।

(एक साइड-नोड के रूप में, यदि आपके पास एक प्राचीन प्रणाली है जो अभी भी OLD हार्ड-कोडेड टाइमज़ोन का उपयोग करती है, तो आप शायद इस पर एक आधुनिक टाइमज़ोन फ़ाइल की प्रतिलिपि बना सकते हैं और यह काम करेगा। बदलते समय-निर्धारण को हल करने के लिए मुझे कई बार ऐसा करना पड़ा है। पुराने उपकरणों पर)।


0

कभी-कभी 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

संदर्भ: इस उत्तर में


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.