লিনাক্স, বাশ-এ এপোকের পর থেকে সেকেন্ডে বর্তমান সময় পান


633

আমার মতো সাধারণ কিছু দরকার date, তবে বর্তমান তারিখ, ঘন্টা, মিনিট এবং সেকেন্ডের পরিবর্তে 1970 থেকে সেকেন্ডে।

dateমনে হয় না যে বিকল্পটি অফার করে। একটি সহজ উপায় আছে কি?


22
দুঃখিত, আমাকে অবশ্যই এটি বলতে হবে .... '' তারিখটি এই বিকল্পটি দিচ্ছে বলে মনে হয় না। কোন সহজ উপায় আছে? '' - ম্যানুয়ালটি আবার পড়ুন ;-)
থোনসনাই

7
তারিখের কিছু সংস্করণ এটি আছে এবং কিছু না। সুতরাং এটি সবসময় উপস্থিত হয় না। আমি 'টাইপ -a তারিখ' চালিয়েছি এবং একটি ভিন্ন সংস্করণ ব্যবহার করেছি এবং এটি কাজ করেছে।
স্কট রাওলি

1
এফডব্লিউআইডাব্লু, উবুন্টুর কেবলমাত্র / বিন / তারিখ রয়েছে, যার জন্য @ স্টিফের উত্তর কাজ করে
জোনাথন হার্টলি

1
@ দ্য বনসাই এটি 'তারিখ' সরঞ্জামের পসিক্স স্ট্যান্ডার্ড সংস্করণের অংশ নয়। আপনার সংস্করণটিতে এটি সম্ভবত (সম্ভবত জিএনইউ) রয়েছে, আপনারা সবার বাস্তবায়নটি ধরে নেবেন না।
Wyatt8740

উত্তর:


1159

এই কাজ করা উচিত:

date +%s

45
তারিখ manpge থেকে পরিবর্তন করা উচিত %s seconds since 1970-01-01 00:00:00 UTCকরার %s seconds since the epoch, 1970-01-01 00:00:00 UTCকারণ আমি সেখানে এটা মিস করেছি।
ডিভাইন

3
আমার জন্য কাজ করে না। ম্যান ডেট% s দেখায় না। আমার কাছে সোলারিসের জন্য খুব পুরানো সংস্করণ (3.2.51 (1)) থাকতে হবে?
livefree75

7
@ livefree75 এর dateমধ্যে অন্তর্নির্মিত নয় bash, সুতরাং আপনার সংস্করণটির bashকোনও dateব্যবস্থা নেই যা আপনার সিস্টেম শিপগুলি প্রয়োগ করে with
অ্যাড্রিয়ান ফ্রেহওয়ার্থ

11
এবং আপনি যদি এক সেকেন্ডের 9 টি দশমিক স্থানে ভগ্নাংশ চান তবে এটি ব্যবহার করুন:date +%s.%N
জোনাথন হার্টলে

19
মিলিসেকেন্ড ব্যবহারের জন্যdate +%s%3N
জুয়ান ক্যাম্পা

133

শুধু যোগ করতে।

কোনও নির্দিষ্ট তারিখের (যেমন 21 শে অক্টোবর 1973) পর্বের পর থেকে (1 জানুয়ারি 1970) সেকেন্ড পান।

date -d "Oct 21 1973" +%s


সেকেন্ডের সংখ্যাটিকে তারিখে ফিরিয়ে আনা

date --date @120024000


কমান্ডটি dateবেশ বহুমুখী। তারিখটি নিয়ে আপনি করতে পারেন এমন অন্য একটি দুর্দান্ত জিনিস (নির্লজ্জভাবে এ থেকে অনুলিপি করা হয়েছে date --help)। মার্কিন পশ্চিম উপকূলে পরের শুক্রবার সকাল 9 টা থেকে স্থানীয় সময়টি প্রদর্শন করুন

date --date='TZ="America/Los_Angeles" 09:00 next Fri'

আরও ভাল, ম্যান পৃষ্ঠাটি পড়ার জন্য কিছুটা সময় নিন http://man7.org/linux/man-pages/man1/date.1.html


এটি ওপি-র প্রশ্ন নয়, এটি আমার উত্তর দেয়, সুতরাং আমার কাছ থেকে +1।
অ্যান্থনিডি 973

হতে পারে এটির সংস্করণ dateবা কারণ আমি zsh(ম্যাকোস ক্যাটালিনা) ব্যবহার করছি তবে এটি আমার পক্ষে কার্যকর হয় না। চলমান $ date -d "Oct 21 1973" +%sআউটপুটusage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
জোশুয়া পিন্টার

43

এখনও অবধি, সমস্ত উত্তর বহিরাগত প্রোগ্রামটি ব্যবহার করে date

বাশ ৪.২, যেহেতু printfএকটি নতুন সংশোধক রয়েছে %(dateformat)Tযা যুক্তির সাহায্যে ব্যবহৃত -1ফরমেটের সাথে বর্তমান তারিখকে আউটপুট করে দেয় dateformat, হ্যান্ডেল দ্বারা পরিচালিত হয় strftime(3)( man 3 strftimeফর্ম্যাটগুলি সম্পর্কিত তথ্যের জন্য)।

সুতরাং, খাঁটি বাশ সমাধানের জন্য:

printf '%(%s)T\n' -1

বা যদি আপনার ফলাফলটি একটি চলকতে সঞ্চয় করতে হয় var:

printf -v var '%(%s)T' -1

কোনও বাহ্যিক প্রোগ্রাম এবং কোনও সাবহেল নেই!

4.3 বাশ, যেহেতু এটি নির্দিষ্ট না করা এমনকি সম্ভব -1:

printf -v var '%(%s)T'

(তবে -1তবুও সর্বদা যুক্তি দেওয়া বুদ্ধিমানের কাজ হতে পারে )।

আপনি যদি -2পরিবর্তে যুক্তি হিসাবে ব্যবহার করেন তবে -1বাশ বর্তমান তারিখের পরিবর্তে শেলটি শুরু করার সময়টি ব্যবহার করবে। এটি অতিবাহিত সময়ের গণনা করতে ব্যবহার করা যেতে পারে

$ printf -v beg '%(%s)T\n' -2
$ printf -v now '%(%s)T\n' -1
$ echo beg=$beg now=$now elapsed=$((now-beg))
beg=1583949610 now=1583953032 elapsed=3422

9
আপনার -2যদি দীর্ঘতর চলমান কাজ থাকে তবে আপনি (ব্যাকআপগুলি নিয়ন্ত্রণের জন্য কোনও স্ক্রিপ্টের কথা চিন্তা করুন) ব্যবহার করতে চান এবং শেষে একটি মেইল ​​প্রেরণ করুন "ব্যাকআপ শুরু হয়েছে $ কিছুটা এখন at এ শেষ হয়েছে" - যা -2কোনও স্টোর এড়ানো এড়ানো দিয়ে সম্পন্ন করা যেতে পারে শুরুতে ডেডিকেটেড ভেরিয়েবল।
সেবাস্তিয়ান জে।

23

বেশিরভাগ অ্যাওক বাস্তবায়ন সহ:

awk 'BEGIN {srand(); print srand()}'

21
বাহ যে অস্পষ্ট
এরিক্লা

8
বাহ, এটিকে একবার দেখতে হবে look এটি একটি ব্যবহারিক সমাধান, তবে ভাল / পোর্টেবল অগত্যা নয়। দেখে মনে হচ্ছে অজকের বাস্তবায়নগুলিsrand() সাধারণত বর্তমান তারিখ / সময় সহ সিড হয়। srand()পূর্বে বীজ হিসাবে ব্যবহৃত মানটি ফেরত দেওয়ার জন্য দ্বিতীয় কল ।
রায়ান র্যানসফোর্ড

23

খাঁটি বাশ সমাধান

bash5.0 সাল থেকে ( 7 জানুয়ারী 2019 এ প্রকাশিত ) আপনি বিল্ট-ইন ভেরিয়েবলটি ব্যবহার করতে পারেন EPOCHSECONDS

$ echo $EPOCHSECONDS
1547624774

রয়েছে EPOCHREALTIMEযা সেকেন্ডের ভগ্নাংশ অন্তর্ভুক্ত করা হয়েছে।

$ echo $EPOCHREALTIME
1547624774.371215

EPOCHREALTIMEদশমিক বিন্দু সরিয়ে মাইক্রো সেকেন্ডে (μ গুলি) রূপান্তর করা যায়। এটি bashঅন্তর্নির্মিত গাণিতিক ব্যবহার করার সময় আগ্রহী হতে পারে (( expression ))যা কেবলমাত্র পূর্ণসংখ্যাগুলি পরিচালনা করতে পারে।

$ echo ${EPOCHREALTIME/./}
1547624774371215

উপরে থেকে সমস্ত উদাহরণে মুদ্রিত সময়ের মানগুলি ভাল পাঠযোগ্যতার জন্য সমান। বাস্তবে সময়ের মানগুলি পৃথক হয় যেহেতু প্রতিটি কমান্ড কার্যকর করতে অল্প পরিমাণ সময় নেয়।


মিলিসেকেন্ড রেজোলিউশনের জন্য (একই ফর্ম্যাট হিসাবে date +%s%3N) আপনি ব্যবহার করতে পারেনecho $(( ${EPOCHREALTIME/./} / 1000 ))
ভাগ্যমান 212

19

এটি @ পেলিউসাইড যা করেছে তার একটি এক্সটেনশন, তবে ম্যাক্সের জন্য:

কোন নির্দিষ্ট তারিখের জন্য যুগের আগে (জানুয়ারী 1 1970) থেকে সেকেন্ডের সংখ্যা নির্ধারণ করা (যেমন 21 অক্টোবর 1973)

$ date -j -f "%b %d %Y %T" "Oct 21 1973 00:00:00" "+%s"
120034800

দয়া করে মনে রাখবেন, সম্পূর্ণতার জন্য, আমি সময়ের অংশটি ফর্ম্যাটে যুক্ত করেছি। কারণ হ'ল আপনি যে dateতারিখের অংশটি দিয়েছেন তা গ্রহণ করবে এবং প্রদত্ত মানের সাথে বর্তমান সময় যুক্ত করবে । উদাহরণস্বরূপ, আপনি উপরের কমান্ডটি যদি '00: 00: 00 'অংশ ব্যতীত 4:19 অপরাহ্নে কার্যকর করেন তবে এটি স্বয়ংক্রিয়ভাবে সময় যোগ করবে। যেমন "21 অক্টোবর 1973" "অক্টোবর 21 1973 16:19:00" হিসাবে পার্স করা হবে। আপনি যা চান তা তা নাও হতে পারে।

আপনার টাইমস্ট্যাম্পটিকে কোনও তারিখে ফিরিয়ে আনতে:

$ date -j -r 120034800
Sun Oct 21 00:00:00 PDT 1973

তারিখ প্রয়োগের জন্য অ্যাপলের ম্যান পৃষ্ঠা: https://developer.apple.com/library/mac/docamentation/Darwin/References/ManPages/man1/date.1.html


1
স্পষ্টত, এটি বিএসডি-র dateকমান্ডের জন্য, যেখানে যে কোনও সমাধানের প্রস্তাব দেওয়া date -dহয় তা জিএনইউর জন্য date। ম্যাকোজে বিএসডি তারিখটি ফ্রিবিএসডি থেকে আসে এবং নেটবিএসডি এবং ওপেনবিএসডি-র সাথে প্রচুর বিকল্প শেয়ার করে। এবং এটি বাশ থেকে সম্পূর্ণ পৃথক
ঘোটি

%Nবিকল্প GNU তারিখ ভগ্ন সেকেন্ডের জন্য উল্লিখিত MacOS এর তারিখ হইতে অনুপস্থিত। 10.14-এ, কোনও ফর্ম্যাট ম্যান পৃষ্ঠায় নেই; তারা strftime(3)ম্যান পৃষ্ঠায় রয়েছে, যা আপনার কাছে নেই যদি আপনি এক্সকোড ইনস্টল না করেন এবং আপনি না করেন তবে ম্যান কমান্ডের সাহায্যে দেখতে পাবেন না।
ড্যান প্রীটস

1

এই বাশ স্ক্রিপ্টটি ব্যবহার করুন (আমার ~/bin/epoch):

#!/bin/bash

# get seconds since epoch
test "x$1" == x && date +%s && exit 0

# or convert epoch seconds to date format (see "man date" for options)
EPOCH="$1"
shift
date -d @"$EPOCH" "$@"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.