আমি কীভাবে একটি চিরকালীন টাইমস্ট্যাম্পকে ক্লায়েন্টে একটি মানব পাঠযোগ্য বিন্যাসে রূপান্তর করব? আমি মনে করি তারিখ সহ এটি করার একটি উপায় আছে তবে সিনট্যাক্সটি আমাকে ছাড়ায় (অন্য উপায়গুলি স্বাগত)।
আমি কীভাবে একটি চিরকালীন টাইমস্ট্যাম্পকে ক্লায়েন্টে একটি মানব পাঠযোগ্য বিন্যাসে রূপান্তর করব? আমি মনে করি তারিখ সহ এটি করার একটি উপায় আছে তবে সিনট্যাক্সটি আমাকে ছাড়ায় (অন্য উপায়গুলি স্বাগত)।
উত্তর:
বিএসডি তে:
date -r 1234567890
লিনাক্সে (বিশেষত, জিএনইউ কোর্টিলস -5.3 সহ):
date -d @1234567890
জিএনইউ তারিখের পুরানো সংস্করণ সহ, আপনি ইউটিসি যুগের তুলনামূলক পার্থক্য গণনা করতে পারেন:
date -d '1970-01-01 UTC + 1234567890 seconds'
আপনার যদি বহনযোগ্যতার দরকার হয় তবে আপনার ভাগ্যের বাইরে। আপনি কেবলমাত্র পসিক্স শেল কমান্ড দিয়ে বিন্যাস করতে পারবেন (নিজের হিসাবটি না করেই) লাইনের বর্তমান সময়। অনুশীলনে, পার্ল প্রায়শই উপলব্ধ:
perl -le 'print scalar localtime $ARGV[0]' 1234567890
@অর্থ কী date -d @1234567890? man dateতাতে কোনও রেফারেন্স দেয়নি ...
info dateবেশ সম্পূর্ণ। এন্ট্রিটি 28.9 Seconds since the Epoch@ টাইমস্ট্যাম্প সম্পর্কে বিস্তারিতভাবে ব্যাখ্যা করে।
$ echo 1190000000 | perl -pe 's/(\d+)/localtime($1)/e'
Sun Sep 16 20:33:20 2007
এটি লগফাইলে যে সমস্ত অ্যাপ্লিকেশন সময় ব্যবহার করে তাদের জন্য এটি কার্যকর হতে পারে:
$ tail -f /var/log/nagios/nagios.log | perl -pe 's/(\d+)/localtime($1)/e'
[Thu May 13 10:15:46 2010] EXTERNAL COMMAND: PROCESS_SERVICE_CHECK_RESULT;HOSTA;check_raid;0;check_raid.pl: OK (Unit 0 on Controller 0 is OK)
জিএনইউ সহ কাস্টম ফর্ম্যাট date:
date -d @1234567890 +'%Y-%m-%d %H:%M:%S'
বা জিএনইউ সহ awk:
awk 'BEGIN { print strftime("%Y-%m-%d %H:%M:%S", 1234567890); }'
লিঙ্কযুক্ত এসও প্রশ্ন: https://stackoverflow.com/questions/3249827/convert-from-unixtime-at-command-line
bash-4.2বা তার সাথে উপরে:
printf '%(%F %T)T\n' 1234567890
(যেখানে %F %Tহয় strftime()টাইপ বিন্যাস)
সেই বাক্য গঠনটি অনুপ্রাণিত হয়েছে ksh93।
ইন ksh93তবে যুক্তি তারিখ অভিব্যক্তি যেখানে বিভিন্ন এবং কষ্টসহকারে নথিভুক্ত ফরম্যাটের সমর্থিত হিসাবে নেওয়া হয়।
ইউনিক্স যুগের জন্য সিনট্যাক্সটি ksh93হ'ল:
printf '%(%F %T)T\n' '#1234567890'
ksh93তবে সময় অঞ্চলটির জন্য এটি নিজস্ব অ্যালগরিদম ব্যবহার করে মনে হচ্ছে এটি ভুল হতে পারে। উদাহরণস্বরূপ, ব্রিটেনে, এটি 1970 সালে সারা বছর গ্রীষ্মের সময় ছিল, কিন্তু:
$ TZ=Europe/London bash -c 'printf "%(%c)T\n" 0'
Thu 01 Jan 1970 01:00:00 BST
$ TZ=Europe/London ksh93 -c 'printf "%(%c)T\n" "#0"'
Thu Jan 1 00:00:00 1970
যদি আপনার যুগের সময়টি সেকেন্ডের পরিবর্তে মিলিসেকেন্ডে থাকে তবে শেষ করার আগে শেষ তিনটি সংখ্যা সরিয়ে ফেলুন date -d:
$ date -d @1455086371603
Tue Nov 7 02:46:43 PST 48079 #Incorrect
এটি ভুল তথ্য দেয়। শেষ তিনটি সংখ্যা মুছুন।
$ date -d @1455086371
Tue Feb 9 22:39:31 PST 2016 #Correct after removing the last three digits. You may remove and round off the last digit too.
আপনার সাথে বিল্টিন zshব্যবহার করতে পারবেন strftime:
strftime বিন্যাস epochtime
আউটপুট তারিখ দ্বারা প্রকাশ epochtime মধ্যে বিন্যাস নির্দিষ্ট করা হয়েছে।
যেমন
zmodload zsh/datetime
strftime '%A, %d %b %Y' 1234567890
শুক্রবার, 13 ফেব্রুয়ারী 2009
এর থেকেও dateconvরয়েছে dateutils:
dateconv -i '%s' -f '%A, %d %b %Y' 1234567890
শুক্রবার, 13 ফেব্রুয়ারী 2009
মনে রাখা dateutilsসরঞ্জাম ডিফল্ট UTC(যোগ -z your/timezoneপ্রয়োজন হলে)।
ডেটটাইম মুদ্রণের জন্য আপনি শেল দ্বারা সরাসরি পার্স করা যায় এমন ফর্ম্যাটটিতে একটি সামান্য সি প্রোগ্রাম ব্যবহার করতে পারেন
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main(int argc, char * argv[]) {
if (argc==1) {
return 1;
}
struct tm input_tm;
char * formatStr = "YEAR=%Y\nMON=%m\nDAY=%d\nHOUR=%H\nMIN=%M\nSEC=%S";
size_t formatSize = strlen(formatStr) + 2;
char * output = (char *)malloc(sizeof(char)*formatSize);
strptime(argv[1],"%s",&input_tm);
strftime(output, formatSize, formatStr, &input_tm);
printf("%s\n",output);
free(output);
return 0;
}
ব্যবহার:
#compile
clang -o epoch2datetime main.c
#invoke
eval `./epoch2datetime 1450196411`
echo $YEAR $MON $DAY $HOUR $MIN $SEC
#output
#2015 12 16 00 20 11
সামান্য নোড.জেএস ব্যতীত আসল সমাধান হতে পারে না:
epoch2date(){
node -p "new Date($1)"
}
এতে যোগ করুন ~/.bash_aliasesএবং নিশ্চিত করুন যে এটির ~/.bashrcসাথে এটি উত্সাহিত হয়েছে. ~/.bash_aliases
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
আপনার সিস্টেমে নোড পেতে http://nvm.sh এবং কার্ল কমান্ডটি চালান। এটি নোড সংস্করণ পরিচালক (এনভিএম) ইনস্টল করবে যা আপনাকে নোডের সংস্করণগুলি স্যুইচ করতে দেয়।
কেবল nvm ls-remoteএকটি সংস্করণ টাইপ করুন এবং চয়ন করুন nvm install <version>।
এটি করার একটি সহজ উপায় আছে: (([সিস্টেম.ডেটটাইমঅফসেট] :: ফর্মউনিক্সটাইমিলি সেকেন্ডস ($ ইউনিক্সটাইম))। ডেটটাইম)। টোস্ট্রিং ("গুলি")