আমি কীভাবে আলাদা টাইমজোন থেকে সময় `তারিখ` আউটপুট পেতে পারি?


115

টাইমজোন সেট করার সাথে সাথে আমার একটি সার্ভার চলছে UTC। দেখে মনে হয়েছিল এটি সাধারণত একটি ভাল অনুশীলন ছিল (দয়া করে আমি ভুল হলে আমাকে সংশোধন করুন)।

যাইহোক, আমি সংযুক্ত হওয়া একটি সার্ভার, scpফাইলগুলির জন্য, চলছে EDTএবং সেগুলি সঞ্চয় করে যা আমার ফর্ম্যাটে অনুলিপি করতে হবে/path/to/filename/data20120913

আমি শেষ দিন সংশোধিত ফাইলগুলির জন্য সন্ধানের পতাকাটির rsyncমতো কিছু ব্যবহার করে ফাইলগুলি চেষ্টা করার দিকে তাকিয়েছিলাম -mtime -1তবে আমার কোনও ভাগ্য হয়নি।

আমি কেবল scpবর্তমান দিনের ফাইলটি অনুলিপি করতে ব্যবহার করে কিছু মনে করি না , তবে এখনই 4 ঘন্টার উইন্ডো রয়েছে যেখানে date +%Y%m%dপ্রতিটি সার্ভারে চলমান একটি আলাদা দিন দেয় এবং তা আমাকে কিছুটা বাগিয়ে দেয়।

মাধ্যমে দেখার জন্যে man dateআমি দেখতে আমি সময় আউটপুট পাওয়া যায় করতে পারে UTC, কিন্তু আমি একটি উপায় দেখছি না অনুরূপ আরেকটি সময় অঞ্চল হিসাবে আউটপুট আছেEDT

আমি মনে করি আমি যুগের সময় থেকে কয়েক সেকেন্ডে তারিখ পেতে GNUতারিখ বর্ধনের মতো কিছু ব্যবহার করতে পারি date -d 20100909 +%s, একটি ম্যানুয়াল 4 * 60 * 60দ্বিতীয় গণনা প্রয়োগ করতে পারি এবং তারিখ হিসাবে এটি রেন্ডারিংয়ের বিষয়ে দেখতে পারি - তবে তারপরে যখন দিবালোকের সময় কিক হয় তখনও এক ঘন্টা ছুটি থাকবে ।

যে সার্ভারে সেট করা আছে তার YYYYMMDDফর্ম্যাটে তারিখ আউটপুট করার কি সহজ উপায় EDTআছে UTC?


ইডিটি কোনও স্বীকৃত টাইমজোন নয়- লিনাক্সে, অন্তত। আমার "সাবধান!" দেখুন পুরো কদর্য গল্পের জন্য নীচে উত্তর দিন। EDT যদি আপনার * NIX ব্র্যান্ডে স্বীকৃত হয় তবে আপনার এখনও সতর্কতা অবলম্বন করা উচিত এবং আপনার টাইমজোন স্ট্রিংটি ডাবল-চেক করা উচিত।
মাইক এস

উত্তর:


175

আপনি কোয়েরির সময়কালের জন্য একটি সময় অঞ্চল নির্ধারণ করতে পারেন, এভাবে:

TZ=America/New_York date

TZসেটিংস এবং dateকমান্ডের মধ্যে শ্বেতস্পেস নোট করুন । বোর্ন-জাতীয় এবং rcপছন্দসই শেল-এ, TZকেবল কমান্ড লাইনের জন্য ভেরিয়েবল সেট করে । অন্যান্য শাঁস (ইন csh, tcsh, fish), আপনি সবসময় ব্যবহার করতে পারেন envপরিবর্তে কমান্ড প্রয়োগ করুন:

env TZ=America/New_York date

TL; ড

লিনাক্স সিস্টেমগুলিতে। টাইম অঞ্চলগুলি /usr/share/zoneinfoডিরেক্টরিতে ফাইলগুলিতে সংজ্ঞায়িত করা হয় । এই কাঠামোটি প্রায়শই "ওলসন ডাটাবেস" হিসাবে প্রতিষ্ঠানের অবদানকারীকে সম্মান জানায়।

প্রতিটি টাইমজোনগুলির নিয়মগুলি পাঠ্য ফাইল লাইন হিসাবে সংজ্ঞায়িত হয় যা পরে বাইনারি ফাইলে সংকলিত হয়। লাইনগুলি এতগুলি সংকলিত, জোনের নাম নির্ধারণ করুন; অঞ্চলটি প্রয়োগ করার সময় ডেটা এবং সময়ের একটি ব্যাপ্তি; মানক সময়ের জন্য ইউটিসি থেকে একটি অফসেট; এবং প্রযোজ্য ক্ষেত্রে, দিবালোক সংরক্ষণের সময় থেকে কীভাবে রূপান্তর ঘটে তা সংজ্ঞায়নের জন্য স্বরলিপি।

উদাহরণস্বরূপ, ডিরেক্টরি "আমেরিকা" ডিরেক্টরিতে America/New_Yorkউপরের হিসাবে ব্যবহৃত ফাইলটিতে নিউ ইয়র্কের প্রয়োজনীয় তথ্য রয়েছে ।

সাবধান থাকুন যে অস্তিত্বহীন অঞ্চল (ফাইলের নাম) এর স্পেসিফিকেশনটি চুপচাপ উপেক্ষা করা হবে এবং ইউটিসি বারের রিপোর্ট করা হবে। উদাহরণস্বরূপ, এটি একটি ভুল সময় রিপোর্ট করেছে:

TZ="America/New York" date ### WRONG ###

সিঙ্গল ইউনিক্স স্পেসিফিকেশন, সংস্করণ -৩, যা এসইউএসভি 3 বা পসিক্স -2001 হিসাবে পরিচিত, উল্লেখ করেছে যে বহনযোগ্যতার জন্য টাইমজোন বর্ণনাকে চিহ্নিতকারী চরিত্রের স্ট্রিংটি কোলন চরিত্রের সাথে শুরু হওয়া উচিত। সুতরাং, আমরা এটিও লিখতে পারি:

TZ=":America/New_York" date
TZ=":America/Los_Angeles" date

কোনও বর্ণনা ফাইলের পাথের নাম ব্যবহার করে সময় অঞ্চলগুলির নির্দিষ্টকরণের বিকল্প বিকল্প হিসাবে, এসইউএসভি 3 পসিক্স মডেলটি বর্ণনা করে। এই বিন্যাসে, একটি স্ট্রিং হিসাবে সংজ্ঞায়িত করা হয়:

std offset [dst[offset][,start-date[/time],end-date[/time]]]

যেখানে stdস্ট্যান্ডার্ড উপাদানটির নাম এবং dstএটি দিবালোক সংরক্ষণের। প্রতিটি নাম তিন বা ততোধিক অক্ষর নিয়ে গঠিত। offsetঅবস্থানের উপর ভিত্তি করে সেই পূর্ব জন্য মূলমধ্যরেখা পশ্চিমে সময়ের অঞ্চলগুলোকে জন্য ইতিবাচক ও নেতিবাচক। ইউটিসি (পূর্বে জিএমটি হিসাবে পরিচিত) পেতে স্থানীয় সময়ে অফসেট যুক্ত করা হয়। startএবং endসময় ক্ষেত্র নির্দেশ করে যখন মান / দিবালোক ট্রানজিশন ঘটবে।

উদাহরণস্বরূপ, পূর্ব আমেরিকা যুক্তরাষ্ট্রের মানক সময়টি ইউটিসির চেয়ে 5 ঘন্টা আগে এবং আমরা তার EST5EDTপরিবর্তে নির্দিষ্ট করতে পারি America/New_York। এই বিকল্পগুলি সর্বদা স্বীকৃত হয় না, তবে বিশেষত আমেরিকার বাইরের অঞ্চলগুলির জন্য এবং এড়ানো ভাল।

এইচপি-ইউএক্স (একটি এসইউএসভি 3 কমপ্লায়েন্ট ইউএনআইএক্স) পাঠ্য নিয়মাবলী এবং /usr/lib/tztabইএসটি 5 ইডিডিটি, সিএসটি 6 সিডিটি, এমএসটি 7 এমডিটি, পিএসটি 8 পিডিটি এর মতো পোসিক্স নামগুলি ব্যবহার করে। ওলসন ডাটাবেসের অনুরূপ ফাইলটিতে প্রতিটি টাইম জোনের theতিহাসিক সমস্ত বিধি রয়েছে।

উল্লেখ্য: আপনি নীচের তালিকা পরিদর্শন দ্বারা সময়ের অঞ্চলগুলোকে সব খুঁজে পেতে সক্ষম হওয়া উচিত: /usr/share/zoneinfo


নিশ্চিত না যদি আমি ভুল, কিন্তু exportবেশী ভালো দেখায় envকমান্ড
insign

@ জেআরফেরগুসন - যদি কোনও টাইমজোন তালিকায় অন্তর্ভুক্ত না করা হয় যেমন লাস ভেগাস বা নেভাদা, সময়টি বৈধ করার বিকল্পগুলি কী কী?
অনুপ্রাণিত হয়েছে

@ মোটিভেটেড যদি আপনার শহর বা রাজ্যটি অন্তর্ভুক্ত না করা হয় তবে আপনার মতো একই জোন তথ্য ব্যবহার করে এমন একটি চয়ন করুন। উদাহরণস্বরূপ, আমি ফ্লোরিডায় আছি, যা নিউইয়র্কের মতো একই সময় অঞ্চল ব্যবহার করে, তাই আমার মেশিনগুলি নিউ ইয়র্কের সময়ে সিঙ্ক্রোনাইজ করে।
জেআরফেরগসন

1
@ জেআরফারগুসন - এটি ধরে নিয়েছে যে ব্যক্তিটি বিভিন্ন সময় অঞ্চল সম্পর্কে সচেতন এবং আপনার ক্ষেত্রে যেমন নিউ ইয়র্ক বিকল্প হিসাবে ব্যবহার করতে সক্ষম। এটা কি একমাত্র বিকল্প হবে? উদাহরণস্বরূপ, আমি ইউরোপে বাস করি না এবং আমি ওভারল্যাপিং টাইমজোনগুলি জানব না।
অনুপ্রাণিত

1
@ প্রচারিত আপনি আপনার অঞ্চলের অন্যান্য পয়েন্টগুলি সন্ধানে সহায়তা করার জন্য এই সাইটের মতো কিছু ব্যবহার করতে পারেন ।
JRFerguson

33

আপনি TZপরিবেশের পরিবর্তনশীলকে হেরফের করে এটি করতে পারেন । নিম্নলিখিতটি আপনাকে মার্কিন / পূর্বের জন্য স্থানীয় সময় দেবে, যা ডিএসটি পরিচালনা করতে যথেষ্ট স্মার্ট হবে যখন এটি ঘুরবে:

# all on one line
TZ=":US/Eastern" date +%Y%m%d

জোন নামটি ফাইলের ভিতরে এবং ডিরেক্টরি থেকে আসে /usr/share/zoneinfo


17

সাবধান হও! তারিখটি আনন্দের সাথে আপনার বর্তমান টাইমজোনটিতে সময় কাটাবে, আপনি যদি এমন সময় নির্ধারণ করেন যা এটি স্বীকৃতি দেয় না।

এটা দেখ:

-bash-4.2$ env TZ=EDT date
Wed Feb 18 19:34:41 EDT 2015
-bash-4.2$ date
Wed Feb 18 19:34:43 UTC 2015

মনে রাখবেন যে ইডিটি নামে কোনও টাইমজোন নেই। প্রকৃতপক্ষে,

-bash-4.2$ find /usr/share/zoneinfo -name "*EDT*"

আয়

/usr/share/zoneinfo/EST5EDT
/usr/share/zoneinfo/posix/EST5EDT
/usr/share/zoneinfo/right/EST5EDT

এবং এটি কাজ করে:

-bash-4.2$ TZ=EST5EDT date
Wed Feb 18 14:36:59 EST 2015
-bash-4.2$ date
Wed Feb 18 19:37:01 UTC 2015

যাইহোক, যদি আপনার বন্ধু গোব্লেডিগুকের রহস্যময় স্থানে বাস করে এবং এর জোন তথ্যটি আপনার নিজের সাথে মিলে যায় তবে আপনি গাব্বলডিগুকের জোনে তারিখের আউটপুট পেতে পারেন এবং এটি আপনাকে জানাতে পেরে ন্যারির সাথে একটি প্রস্থান মূল্য দিয়ে আনন্দিত হবে অঞ্চলটি এটি জানা নেই:

-bash-4.2$ TZ=Gobbledygook date
Wed Feb 18 19:37:36 Gobbledygook 2015
-bash-4.2$ echo $?
0

ওয়াইএমএমভি: আমার ম্যাকস / বিএসডি বাক্সে, ত্রুটিযুক্ত TZস্ট্রিংটি ইউটিসি সময় দেয়।
মার্ক হাডসন


6

তারিখ সিনট্যাক্স যা একটি কম্যান্ড-লাইন আবাহন ব্যাথা তোলে রহস্যময় এবং ত্রুটি-প্রবণ হয়। অতএব আমি একটি ছোট স্ক্রিপ্ট লিখেছি (আমি এর নাম দিয়েছি বিশ্বজুড়ে ), যা নির্দিষ্ট সময় (বা বর্তমান) সময়কে অন্য কিছু সময় অঞ্চল এবং কনভার্সের বেস টাইম জুম (আপনার স্থানীয় একটি) থেকে মুদ্রণ করবে।

এটা এখানে. আপনার প্রয়োজনের সাথে মেলে এটি এডজাস্ট করুন, এটি আপনার পথে রাখুন এবং এটি কার্যকর করতে সক্ষম করুন।

#! / বিন / SH
#
# অন্যান্য সময় অঞ্চলে বেস সময় থেকে নির্দিষ্ট (বা বর্তমান) সময় মুদ্রণ করুন
# এবং কথোপকথন
#

# বেস টাইম জোন থেকে / রূপান্তর করতে হবে
TZBASE = ইউরোপ / এথেন্স

প্রদর্শনের জন্য # সময় অঞ্চল
# আরও নামের জন্য / ইউএসআর / শেয়ার / জোনিনফো / দেখুন
TZONES = 'ইউটিসি আমেরিকা / লস_এঞ্জেলস আমেরিকা / নিউ_ইয়র্ক ইউরোপ / লন্ডন ইউরোপ / প্যারিস'

# প্রদর্শন বিন্যাস
ফর্ম্যাট = '% এইচ:% এম (% পি)% জেড% একটি% মি% বি% ওয়াই'

যদি ["$ 1"]; তারপর
  সময় = "$ 1"
আর
  সময় = `তারিখ +% T``
ফাই

# নির্দিষ্ট আউটপুটে নির্দিষ্ট ইনপুট টাইম অঞ্চল থেকে সময় দেখান
# সময় অঞ্চল
শোটাইম ()
{
  TZIN = $ 1
  TZOUT = $ 2

  TZ = $ TZOUT তারিখ - তারিখ = 'TZ = "' $ TZIN '" "" সময় "+" $ সময় $ TZIN $ TZOUT $ ফর্ম্যাট "
}

tzones এ tz এর জন্য; করা
  শোটাইম $ TZBASE $ tz
সম্পন্ন

প্রতিধ্বনি

tzones এ tz এর জন্য; করা
  শোটাইম $ tz $ TZBASE
সম্পন্ন


3

প্রায়শই আপনার স্থানীয় সময় অঞ্চলে টাইমস্ট্যাম্প থাকে এবং আপনাকে এটিকে দূরবর্তী tz এ রূপান্তর করতে হবে। এটি দিয়ে করা যেতে পারে:

TZ=America/Curacao date -d 'Tue Nov 28 00:07:05 MSK 2016'

কোথায়:

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