ওএস এক্স-এ `তারিখ` কমান্ডের আইএসও 8601` -I` বিকল্প নেই?


193

বাশ স্ক্রিপ্টে, আমি বর্তমান তারিখের সময়টি আইএসও 8601 ফর্ম্যাটে (বেশিরভাগ ইউটিসি) মুদ্রণ করতে চাই এবং মনে হয় এটি এতটা সহজ হওয়া উচিত date -I:

http://ss64.com/bash/date.html

তবে এটি আমার ম্যাকটিতে কাজ করছে বলে মনে হচ্ছে না:

$ date -I
date: illegal option -- I
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... 
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

এবং প্রকৃতপক্ষে, man dateএই বিকল্পটি তালিকাভুক্ত করে না।

যে কেউ জানেন যে এটি বা অন্য কোনও (সহজ) উপায়টি আইএসও 8601 ফর্ম্যাটে তারিখটি মুদ্রণ করার জন্য? ধন্যবাদ!


2
স্পষ্ট করার জন্য, আমি সময় সহ একটি সম্পূর্ণ আইএসও 8601 তারিখ চাই এবং ইউটিসি টাইমজোনটিতে অগ্রাধিকার চাই।
অসীম কিশোর

শুধু প্রশ্নটি সম্পাদনা করা ভাল। আপনি কোন বিন্যাসে সময় চান?
টম জাইচ

@ টম: ঠিক আছে, সম্পাদিত। ফর্ম্যাট অনুসারে, আইএসও 8601 কি যথেষ্ট নির্দিষ্ট নয়?
অসীম কিশোর

না, আইএসও 8601 যথেষ্ট নির্দিষ্ট নয়। এই স্ট্যান্ডার্ডটি বিভিন্ন নির্ভুলতার কয়েকটি বিন্যাস নির্দিষ্ট করে। উভয়ই 2011-08-27এবং 2011-08-27T18:55:43Zআইএসও 8601 ফর্ম্যাট। এবং সত্যই, প্রশ্নটি সম্পাদনা করা আরও সহায়ক হবে যে বেশ কয়েকটি মন্তব্যে আপডেটগুলি ছড়িয়ে দেওয়া। আপনি কী মুদ্রণের চেষ্টা করছেন তার একটি উদাহরণ আদর্শ হতে পারে।
কিথ থম্পসন

6
অন্যান্য জিএনইউ ফ্ল্যাগের সাথে জিএনইউ কোর্টিলগুলি ইনস্টল করে brew(যা উপসর্গ 'g' ব্যবহার করে) ব্যবহার করে gdate -I
জোয়েল পুররা

উত্তর:


348

আপনি ব্যবহার করতে পারেন

date "+%Y-%m-%d"

বা পুরোপুরি আইএসও -8601 অনুসারী তারিখের জন্য , নিম্নলিখিত ফর্ম্যাটগুলির মধ্যে একটি ব্যবহার করুন:

date -u +"%Y-%m-%dT%H:%M:%SZ"

আউটপুট:

2011-08-27T23:22:37Z

অথবা

date +%Y-%m-%dT%H:%M:%S%z

আউটপুট:

2011-08-27T15:22:37-0800

7
টেকনিক্যালি, "টি" প্রস্তাবিত কিন্তু আইএসও 8601. ঐচ্ছিক পরিবর্তে 'টি' এর একটি স্থান ব্যবহার করছে হবে: তারিখ -u + + "% Y-% এম% d টি% h-% m-% এস জেড"
বেসিল Bourque

অবশেষে! আমি এটিকে আমার বাশ_লিয়াসে যুক্ত করেছি
খ্রিস্টিয়ান

হ্যাঁ, দুর্দান্ত উত্তর ধন্যবাদ !, তবে এটি date -u +"%Y-%m-%dT%H:%MZ"ঠিক আমি খুঁজছিলাম।
চিকুমিকু

3
@ এমবিগ্রাস: Zএবং +00:00একই (বেশিরভাগ)। সময় অনুবাদ করার উদ্দেশ্যে, তারা উভয়ই ইউটিসি মানে। তবে ইংল্যান্ড +00:00শীতকালে এবং +01:00গ্রীষ্মে (বিএসটি) থাকে।
জেফ্রি হুল্টেন

5
@ জেফ্রেহুল্টেন: "তারা উভয়ই ইউটিসি অর্থ" - নিতপিক, তবে Zইউটিসি, যখন +00:00জিএমটি is ইউটিসি কোনও টাইমজোন নয় এবং এতে অফসেট নেই; অফসেটটি টাইমজোন এবং ইউটিসির সময় পার্থক্য হিসাবে সংজ্ঞায়িত করা হয়, সময় পরিমাপের মান। জিএমটি +00: 00 ইউটিসি থেকে সরানো হয়েছে (এবং বিএসটি হ'ল, যেমন আপনি বলছেন, ইউটিসি থেকে +01: 00 সরানো হয়েছে)।
আমাদান

57

গনুহ তারিখ date -Iহিসাবে একই date +%F, এবং -Isecondsএবং -Iminutesসময় অন্তর্ভুক্ত ইউটিসি সঙ্গে অফসেট।

$ date +%F # -I or +%Y-%m-%d
2013-05-03
$ date +%FT%T%z # -Iseconds or +%Y-%m-%dT%H:%M:%S%z
2013-05-03T15:59:24+0300
$ date +%FT%H:%M # -Iminutes or +%Y-%m-%dT%H:%M%z
2013-05-03T15:59+0300

-uভালো হয় TZ=UTC+00:00সঙ্গে প্রতিস্থাপন করা যেতে পারে Z

$ date -u +%FT%TZ
2013-05-03T12:59:24Z

এগুলি বৈধ আইএসও 8601 তারিখ বা সময় ফর্ম্যাটগুলিও রয়েছে:

20130503T15 (%Y%m%dT%M)
2013-05 (%Y%m)
2013-W18 (%Y-W%V)
2013-W18-5 (%Y-W%V-%u)
2013W185 (%YW%V%u)
2013-123 (%Y-%j, ordinal date)
2013 (%Y)
1559 (%H%M)
15 (%H)
15:59:24+03 (UTC offset doesn't have to include minutes)

এগুলি নয়:

2013-05-03 15:59 (T is required in the extended format)
201305 (it could be confused with the YYMMDD format)
20130503T15:59 (basic and exteded formats can't be mixed)

3
হুরে + "% এফটি% টি% জেড" এর জন্য ঠিক আমার যা প্রয়োজন ছিল
নোহ ইয়েটার

22

একটি সংক্ষিপ্ত বিকল্প যা জিএনইউ এবং বিএসডি উভয়ের তারিখে কাজ করে:

date -u +%FT%T%z

7
বা date -u +%FT%TZযেহেতু ইউটিসি-তে অফসেট যাইহোক শূন্য হতে পারে
akostadinov

15

কোর্টিলস প্যাকেজটি জিএনইউ সংস্করণের সরঞ্জাম সরবরাহ করে। স্থাপন করা:

$ brew install coreutils

আপনি কী সরবরাহ করেছেন তা দেখতে পাবেন:

$ brew list coreutils

লক্ষ্য করুন এটি তারিখের সাথে আসে:

$ brew list coreutils | grep date

এটি স্ট্যান্ডার্ড জিএনইউ ডেট কমান্ড তাই এটি -আই সুইচটি নেবে:

$ gdate -I
2016-08-09

1
বা: gdate --iso-8601=ns2016-09-29T16: 54: 23,485230000 + 02: 00
অলিভিয়ার

5

কেবলমাত্র সাধারণ dateবিন্যাসকরণ বিকল্পগুলি ব্যবহার করুন:

date '+%Y-%m-%d'

সম্পাদনা করুন: সময় এবং ইউটিসি অন্তর্ভুক্ত করতে এগুলি সমান:

date -u -Iseconds

date -u '+%Y-%m-%dT%k:%M:%S%z'

আমার ওপিতে একটি মন্তব্য যুক্ত করে এই স্পষ্ট করে জানিয়েছে যে সময় সহ আমি পুরো তারিখ চাই এবং ইউটিসি টাইমজোনটিতে অগ্রাধিকার চাই। যদিও টিপটির জন্য ধন্যবাদ!
অসীম কিশোর

3

এটি বাশের কোনও বৈশিষ্ট্য নয়, এটি dateবাইনারির বৈশিষ্ট্য । লিনাক্সে আপনার সাধারণত জিএনইউ কোর্টিলস সংস্করণ থাকে dateতবে ওএসএক্সে আপনার বিএসডি লেগ্যাসি ইউটিলিটি থাকে। জিএনইউ সংস্করণ অবশ্যই certainlyচ্ছিক প্যাকেজ হিসাবে ইনস্টল করা যেতে পারে, বা আপনি নিজের প্রতিস্থাপনটি রোল করতে পারেন - আমি বিশ্বাস করি এটি পার্লের মতো একটি সাধারণ ওয়ান-লাইনার হওয়া উচিত।


আকর্ষণীয়, ধন্যবাদ। আমি একজন ম্যাক / লিনাক্স / ইউনিক্স / বাশ নুব; আপনি কি কোর্টিলগুলি বিশদভাবে বর্ণনা করবেন এবং ম্যাকে এটি কীভাবে ইনস্টল করবেন? ধন্যবাদ!
অসীম কিশোর

2

অন্যান্য উত্তরগুলি আরও একধাপ এগিয়ে নিয়ে যাওয়া, আপনি তারিখের -Iপতাকাটি যুক্ত করতে আপনার ~ / .bashrc বা ~ / .zshrc এ একটি ফাংশন যুক্ত করতে পারেন :

date() {
  if [ "$1" = "-I" ]; then
    command date "+%Y-%m-%dT%H:%M:%S%z"
  else
  command date "$@"
  fi
}

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