ইউনিক্স টাইমস্ট্যাম্পকে তারিখের স্ট্রিংয়ে রূপান্তর করুন


128

ইউনিক্স কমান্ড লাইন থেকে কোনও ইউনিক্স টাইমস্ট্যাম্পকে একটি তারিখে রূপান্তর করার জন্য কি দ্রুত, ওয়ান-লাইনার উপায় আছে?

dateপ্রতিটি উপাদান (মাস, দিন, বছর, ঘন্টা ইত্যাদি) নির্দিষ্ট করে দেওয়া বিশ্রী ব্যতীত কাজ করতে পারে এবং কীভাবে এটি সঠিকভাবে কাজ করা যায় তা আমি বুঝতে পারি না। মনে হচ্ছে এর থেকে সহজ উপায় হতে পারে - আমি কি কিছু মিস করছি?


উত্তর:


181

জিএনইউ এর সাহায্যে dateআপনি এটি করতে পারেন:

date -d "@$TIMESTAMP"
# date -d @0
Wed Dec 31 19:00:00 EST 1969

(থেকে: বেস: ইউনিক্স টাইমস্ট্যাম্পকে একটি তারিখে রূপান্তর করুন )

ওএস এক্সে, ব্যবহার করুন date -r

date -r "$TIMESTAMP"

বিকল্পভাবে, ব্যবহার করুন strftime()। এটি সরাসরি শেল থেকে পাওয়া যায় না, তবে আপনি গাওকের মাধ্যমে এটি অ্যাক্সেস করতে পারেন । %cউল্লেখ এই লোকেল নির্ভর পদ্ধতিতে টাইমস্ট্যাম্প প্রদর্শন করা হয়।

echo "$TIMESTAMP" | gawk '{print strftime("%c", $0)}'
# echo 0 | gawk '{print strftime("%c", $0)}'
Wed 31 Dec 1969 07:00:00 PM EST

3
টাইমস্ট্যাম্পটি থেকে মিলিসেকেন্ডগুলি সরিয়ে ফেলার বিষয়টি নিশ্চিত করুন (এটি 13 এর পরিবর্তে কেবলমাত্র 10 ডিজিট), অন্যথায় আপনি অবৈধ ফলাফল পাবেন (এটি ম্যাকোএসের তারিখের জন্য সত্য)।
এমেরিনো

আমি ভেবেছিলাম এটি কাজ করছে না, যতক্ষণ না বুঝলাম আমার মিলিসে টাইমস্ট্যাম্প রয়েছে। শেষ 3 সংখ্যাটি কেটে ফেলুন এবং আপনি সঠিক সময়টি পেতে পারেন
স্টিয়ার্ট

64

date -d @1278999698 +'%Y-%m-%d %H:%M:%S' যেখানে পিছনের @সংখ্যাটি সেকেন্ডে সংখ্যা


28
ওএসএক্স 10.8 এ, এটি date -r 1278999698 +'%Y-%m-%d %H:%M:%S'(জিএমটি) বা সহজভাবেdate -r 1278999698
টম ম্যাকেনজি

উবুন্টু 16.04
মাইক কিউ

24

এই সমাধানটি তারিখের সংস্করণগুলির সাথে কাজ করে যা সমর্থন করে না date -d @। এটি AWK বা অন্যান্য কমান্ডের প্রয়োজন হয় না । একটি ইউনিক্স টাইমস্ট্যাম্পটি 1 জানুয়ারি, 1970, ইউটিসি থেকে সেকেন্ডের সংখ্যা তাই ইউটিসি নির্দিষ্ট করা গুরুত্বপূর্ণ is

date -d '1970-01-01 1357004952 sec UTC'
Mon Dec 31 17:49:12 PST 2012

আপনি যদি ম্যাক এ থাকেন তবে ব্যবহার করুন:

date -r 1357004952

যুগ যুগের জন্য আদেশ:

date +%s
1357004952

ক্রেডিট অ্যান্টনে যায়: বেস: ইউনিক্স টাইমস্ট্যাম্পকে একটি তারিখে রূপান্তর করুন


10

যেমন @ টমম্যাককেঞ্জি অন্য উত্তরের মন্তব্যে বলেছেন, date -r 123456789ইউনিক্স ইপোকের পর থেকে কয়েক সেকেন্ড হিসাবে দেওয়া সময়ের জন্য এটি সাধারণভাবে (যেমন আরও ব্যাপকভাবে প্রয়োগ করা হয়েছে) সহজ সমাধান, তবে দুর্ভাগ্যক্রমে কোনও সার্বজনীন গ্যারান্টিযুক্ত বহনযোগ্য সমাধান নেই।

-dসিস্টেম অনেক ধরনের বিকল্পটি কিছু গনুহ তারিখ চেয়ে সম্পূর্ণরূপে পৃথক অর্থ --dateএক্সটেনশান। দুঃখজনকভাবে জিএনইউ তারিখ -rঅন্যান্য বাস্তবায়নগুলির মতো একই ব্যাখ্যা দেয় না । সুতরাং দুর্ভাগ্যক্রমে আপনাকে জানতে হবে আপনি কোন সংস্করণটি dateব্যবহার করছেন এবং অনেকগুলি পুরানো ইউনিক্স dateকমান্ড কোনও বিকল্প সমর্থন করে না।

এমনকি খারাপ, POSIX dateস্বীকার তন্ন তন্ন -dনা -rএবং কোন আদর্শ উপায় (যে আমি জানি) কম্যান্ড লাইন থেকে একটি ইউনিক্স সময় ফরম্যাট করতে (যেহেতু POSIX awk এছাড়াও অভাব আছে এ সব কোনো কমান্ড মধ্যে উপলব্ধ strftime())। (আপনি ব্যবহার করতে পারবেন না touch -tএবং lsকারণ পূর্ববর্তীটি ইউনিক্সের যুগের পরে সেকেন্ড হিসাবে দেওয়া সময়কে গ্রহণ করে না))

দ্রষ্টব্য যদিও ব্রায়ান কর্নিগান থেকে সরাসরি ওয়ান ট্রু আওক উপলভ্য এখন ইউনিক্স ইপোকের পরে সেকেন্ডে সেকেন্ডে ফিরিয়ে আনার জন্য strftime()অন্তর্নির্মিত systime()ফাংশন রয়েছে এবং তাই সম্ভবত অ্যাওক সমাধানটি সবচেয়ে বহনযোগ্য।


4

আপনি যদি স্বরলিপিটিকে বিশ্রী মনে করেন, তবে -R-শক্তিটি সহায়তা করে। এটি আরএফসি 2822 ফর্ম্যাটে তারিখটিকে ছাড়িয়ে যায়। তাই আপনি ঐ সমস্ত শনাক্তকারী প্রয়োজন হবে না: date -d @1278999698 -R। আরেকটি সম্ভাবনা আউটপুট আপনার লোকেলে সেকেন্ডের মধ্যে তারিখ: date -d @1278999698 +%c। মনে রাখা সহজ হওয়া উচিত। :-)


2

উপরে dabest1 এর উত্তরে সামান্য সংশোধন। টাইমজোনটি ইউটিসি হিসাবে উল্লেখ করুন, জিএমটি নয়:

$ date -d '1970-01-01 1416275583 sec GMT'
Tue Nov 18 00:53:03 GMT 2014
$ date -d '1970-01-01 1416275583 sec UTC'
Tue Nov 18 01:53:03 GMT 2014

দ্বিতীয়টি সঠিক। আমি মনে করি এর কারণ হ'ল যুক্তরাজ্যে, 1968 থেকে 1971 পর্যন্ত দিবালোক সংরক্ষণ নিয়মিত কার্যকর ছিল।


2

স্ট্যান্ডার্ড পার্ল সমাধানটি হ'ল:

echo $TIMESTAMP | perl -nE 'say scalar gmtime $_'

(বা স্থানীয় সময়, যদি অগ্রাধিকার দেওয়া হয়)



1

এখানে অন্যান্য উদাহরণগুলি মনে রাখা কঠিন। এর সহজতম সময়ে:

date -r 1305712800

মিশ্র ফলাফল: উবুন্টু লিনাক্সে কাজ করে না তবে উদাহরণস্বরূপ ম্যাক ওএস এক্সে করে।
মাইক কিউ

1

নিম্নলিখিতগুলি আপনার ~ / .bashrc এ রাখুন:

function unixts() { date -d "@$1"; }

ব্যবহারের উদাহরণ:

$ unixts 1551276383

Wed Feb 27 14:06:23 GMT 2019

-1

পাইথন:

python -c "from datetime import datetime; print(datetime.fromtimestamp($TIMESTAMP))"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.