কমান্ড লাইন থেকে কীভাবে আমি ইউনিক্স টাইমস্ট্যাম্পের জন্য ফর্ম্যাট করা তারিখ পেতে পারি


59

আমার একটি ইউনিক্স টাইমস্ট্যাম্প রয়েছে এবং আমি সেই টাইমস্ট্যাম্পের সাথে সম্পর্কিত একটি ফর্ম্যাট ডেট (আউটপুটের মতো date) পেতে চাই ।

আমার প্রচেষ্টা এখনও অবধি:

$ date +%s
1282367908
$ date -d 1282367908
date: invalid date `1282367908'
$ date -d +1282367908
date: invalid date `+1282367908'
$ date +%s -d +1282367908
date: invalid date `+1282367908'

আমি যেমন আউটপুট পেতে সক্ষম হতে চাই:

$ TZ=UTC somecommand 1282368345
Sat Aug 21 05:25:45 UTC 2010

উত্তর:


91

ম্যাক ওএস এক্স এবং বিএসডি তে:

$ date -r 1282368345
Sat Aug 21 07:25:45 CEST 2010
$ date -r 1282368345 +%Y-%m-%d
2010-08-21

জিএনইউ মূল সরঞ্জামগুলির সাথে (আপনাকে তার জন্য তথ্য ফাইলটি খনন করতে হবে):

$ date -d @1282368345
Sat Aug 21 07:25:45 CEST 2010
$ date -d @1282368345 --rfc-3339=date
2010-08-21

উভয়টি দিয়ে, -u(মানক) বিকল্পটি যুক্ত করুন, বা TZ=UTC0ইউটিসি তারিখের জন্য একটি পরিবেশের পরিবর্তনশীল পাস করুন ( ইউটিসি থেকে অফসেট 0 দিয়ে একটি টাইমজোন TZ=UTC0 সংজ্ঞায়িত করা হয়েছেUTC যখন TZ=UTC(অফসেটবিহীন) এর আচরণটি অনির্দিষ্ট করা হয়েছে (যদিও বেশিরভাগ সিস্টেমে একটি উল্লেখ করা হবে) সিস্টেম-সংজ্ঞায়িত টাইমজোনটি UTCইউটিসি থেকে অফসেট 0 দিয়েও কল করা হয় ))।


1
এটি প্রচুর খনন করে, যদিও এটি একটি সাধারণ কাজের জন্য আশ্চর্যজনক।
ডেভিড জেড

ধন্যবাদ, আপনার উত্তর গৃহীত। আমার info coreutils dateআরও একটু মনোযোগ দিয়ে পড়া উচিত ছিল।
উমং

এটি আমাকে কিছুটা আলাদা তারিখ দিচ্ছে: date -r 1447264553943ফলাফল Wed Dec 28 01:39:03 BRST 47831আসলে এটি আসলে 11/11/2015, 3:55:53 PM GMT-2:00
ফলম্প

1
@ ফালাম্প: আপনি মাইক্রোসেকেন্ডের পরিবর্তে সেকেন্ড ব্যবহার করলে এটি কাজ করবে।

@ ওপস ওপসগুলি, বছরটি 47831 বলে মনে করা উচিত ছিল, তবে এই সংখ্যাটি এত বেশি ছিল আমি এটিকে মিস করেছি। ধন্যবাদ!
ফলম

6

কিছু গুগল করার পরে, আমি এটি dateকেবল আদেশ দিয়েই করার উপায় খুঁজে পেয়েছি :

$ date --date "Jan 1, 1970 00:00:00 +0000 + 1282367908 seconds"
Sat Aug 21 09:18:28 MSD 2010

তার জন্য ধন্যবাদ. আমি আশা করছিলাম যে আরও সহজ কিছু হবে, তাই আপাতত একটি আপ ভোট দিন।
উমং

কীভাবে গুগল আপনাকে বোকা করে তোলে তার আরেকটি দুর্দান্ত উদাহরণ। কেউ কি আর কখনও ডকুমেন্টেশন পড়ে না?

1
@ ওপ, ২০০ date -d @xxx2005 সালে কোর্টিলস ৫.৩ অবধি সমর্থন যোগ করা হয়নি That's এর আগে আপনাকে এটি করতে হয়েছিল।
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস: ক) এই উত্তরটি ২০১০ সালের এবং খ) ডকুমেন্টেশন পড়ার আগে এই অজুহাতটি কেন গুগল? আপনি যদি নিজের কর্তৃপক্ষের কাছ থেকে উত্তর দেন তবে কেউ এ জাতীয় ত্রুটি তৈরি করতে পারে না তবে আপনি যদি যাইহোক এটি দেখতে চান তবে ডানদিকে তাকান।

@ ওপ, আমি কেবল এটি দেখিয়েছিলাম যে এটি কোনও বোকা উত্তর নয়, কেবল একটি পুরানো উত্তর।
স্টাফেন চেজেলাস 21

6

এই পার্ল ওয়ান-লাইনার এটি করবে:

$ perl -e 'print scalar localtime $ARGV[0]' 1282367908
Sat Aug 21 09:18:28 2010

5

শেল বিল্টিন সহ:

  • zsh (৪.১.১ (2003) এবং উপরে):

    $ zmodload zsh/datetime
    $ TZ=UTC0 strftime %c 1282368345
    Sat 21 Aug 2010 05:25:45 UTC
    
  • ksh93( ksh93i(2000) এবং উপরে):

    $ TZ=UTC0 printf '%(%c)T\n' '#1282368345'
    Sat Aug 21 05:25:45 2010
    
  • bash (৪.২ (২০১০) এবং উপরে):

    $ TZ=UTC0 printf '%(%c)T\n' 1282368345
    Sat 21 Aug 2010 05:25:45 UTC
    

এই সমস্ত ক্ষেত্রে, আপনি %cযে strftime()ফর্ম্যাটটি চান সেটি প্রতিস্থাপন করুন ।


bash printfসমাধানের জন্য আপনার কি কোনও রেফারেন্স আছে ?
ডেরেক মাহর

কিছু মনে করবেন না, আমি এটা বর্ণনায় পাওয়া printfমধ্যে gnu.org/software/bash/manual/bashref.html#Bash-Builtins
ডেরেক মাহর


1

আধুনিক ইউনিক্সের সমৃদ্ধ heritageতিহ্যের আরেকটি ঝরঝরে উদাহরণ। বেশিরভাগ বিএসডি ভেরিয়েন্টের অধীনে এটি সত্যই সম্ভব:

$ TZ=UTC date -r 1282368345
Sat Aug 21 05:25:45 UTC 2010

(বিটিডব্লিউ আপনার উদাহরণটি এক সেকেন্ডের মধ্যে বন্ধ বলে মনে হচ্ছে)


লিনাক্সে কাজ করে না। হ্যাপের উত্তরটিতে সঠিক লিনাক্স উত্তর রয়েছে বলে মনে হচ্ছে। এটি উল্লেখ করার জন্য ধন্যবাদ, আমি সন্দেহ করি এরকম কিছু ঘটবে, আমি এখন এটি 45 সেকেন্ডে তৈরি করেছি।
উমং

1

একটি পুরানো প্রশ্নের উত্তর, কিন্তু আমি মনে করি যে এটির কোনও উন্নতি হতে পারে যদি অন্য কেউ এটির জন্য অনুসন্ধান করে। এই বাশ ফাংশনটি লিনাক্স এবং ওএস এক্স উভয় ক্ষেত্রেই কাজ করে I আমি অন্য কোনও বিএসডি সিস্টেমে পরীক্ষা করি নি। এই ফাংশনটির আর্গুমেন্ট হিসাবে যুগের সময় কেটে দিন এবং এটি আরএফসি -৩৩39৩ সময় ফর্ম্যাটটি মুদ্রণ করবে।

epochtorfc3339 ()
{
    RFC3339_FORMAT="+%FT%T:::%z"
    EPOCH=$(echo $@ | sed -n "s/.*\([0-9]\{10\}\).*/\1/p");
    if date --version >/dev/null 2>/dev/null; then
        # Linux
        date ${RFC3339_FORMAT} -d "1970-01-01 UTC ${EPOCH} seconds"
        #date -d @${EPOCH} --rfc-3339=seconds
    else
        # OS X/BSD
        date -r ${EPOCH} ${RFC3339_FORMAT}
    fi
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.