আমি কীভাবে একটি চিরকালীন টাইমস্ট্যাম্পকে ক্লায়েন্টে একটি মানব পাঠযোগ্য বিন্যাসে রূপান্তর করব?


183

আমি কীভাবে একটি চিরকালীন টাইমস্ট্যাম্পকে ক্লায়েন্টে একটি মানব পাঠযোগ্য বিন্যাসে রূপান্তর করব? আমি মনে করি তারিখ সহ এটি করার একটি উপায় আছে তবে সিনট্যাক্সটি আমাকে ছাড়ায় (অন্য উপায়গুলি স্বাগত)।

উত্তর:


268

বিএসডি তে:

date -r 1234567890

লিনাক্সে (বিশেষত, জিএনইউ কোর্টিলস -5.3 সহ):

date -d @1234567890

জিএনইউ তারিখের পুরানো সংস্করণ সহ, আপনি ইউটিসি যুগের তুলনামূলক পার্থক্য গণনা করতে পারেন:

date -d '1970-01-01 UTC + 1234567890 seconds'

আপনার যদি বহনযোগ্যতার দরকার হয় তবে আপনার ভাগ্যের বাইরে। আপনি কেবলমাত্র পসিক্স শেল কমান্ড দিয়ে বিন্যাস করতে পারবেন (নিজের হিসাবটি না করেই) লাইনের বর্তমান সময়। অনুশীলনে, পার্ল প্রায়শই উপলব্ধ:

perl -le 'print scalar localtime $ARGV[0]' 1234567890

4
বহনযোগ্যতার অভাব সম্পর্কে মন্তব্য করার জন্য +1 (পসিক্স বিশেষে এটি করার কোনও উপায় অন্তর্ভুক্ত করা হয় না কেন? Grr)
রিচার্ড হ্যানসেন

3
এর @অর্থ কী date -d @1234567890? man dateতাতে কোনও রেফারেন্স দেয়নি ...
ক্রিস মার্কেল

10
@ ক্রিসমার্কল জিএনইউ ম্যান পেজগুলি প্রায়শই ভীতিজনকভাবে অসম্পূর্ণ থাকে। "তারিখের স্ট্রিংকে বিন্যাস চেয়ে সহজে এখানে নথিভুক্ত করা আরো জটিল কিন্তু সম্পূর্ণরূপে তথ্য ডকুমেন্টেশন বর্ণনা করা হয়।" বুদ্ধি করতে: gnu.org/software/coreutils/manual/html_node/...
গিলেজ

2
info dateবেশ সম্পূর্ণ। এন্ট্রিটি 28.9 Seconds since the Epoch@ টাইমস্ট্যাম্প সম্পর্কে বিস্তারিতভাবে ব্যাখ্যা করে।

পাইপে লিনাক্সে: তারিখ ''% s '| xargs -I n তারিখ -d @n
ইভান

26

date -d @1190000000 আপনার যুগের সাথে 1190000000 প্রতিস্থাপন করুন


8
জিএনইউ তারিখটি ধরে নিচ্ছি, এটি।
গিলস

14
$ 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)

11

জিএনইউ সহ কাস্টম ফর্ম্যাট 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


3
কেবল জিএনইউ তারিখ এবং জিএনইউ অ্যাজকের জন্য কাজ করে। না জাজ এবং নাউক স্ট্রফটাইম সমর্থন করে না।
ডার্কহার্ট

11

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

7

যদি আপনার যুগের সময়টি সেকেন্ডের পরিবর্তে মিলিসেকেন্ডে থাকে তবে শেষ করার আগে শেষ তিনটি সংখ্যা সরিয়ে ফেলুন 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.

কোন ইউটিলিটি প্রিন্টে মিলিসেকেন্ডগুলি অন্তর্ভুক্ত রয়েছে (বিন্দু ছাড়াই)?

আমি দেখেছি যে ওয়েবলজিক অ্যাপ্লিকেশন সার্ভার বেশিরভাগ সময় মিলিসেকেন্ড সহ ডেটা টাইম মানগুলি দেয় এবং স্ক্রিপ্টিং সরঞ্জামটি ব্যবহার করার সময় কোনও বিন্দু নেই। উদাহরণস্বরূপ, শেষসুসফুলস কানেকশন ইউজ = 1455086371603
নকথার্নল

আমি দেখি. এই পৃষ্ঠাটি কাঁচা সময় মানকে মিলিসেকেন্ডে টাইমস্ট্যাম্পের নিশ্চয়তা দেয় । ধন্যবাদ।

আটলশিয়ান সরঞ্জামগুলি তাদের টাইমস্ট্যাম্পগুলিকে মিলি সেকেন্ডের সাথে যুগের সময় হিসাবে লগ করে।
জুনিয়র বিল

6

আমি প্রায়শই দুটি ব্যবহার করি:

$ perl -leprint\ scalar\ localtime\ 1234567890
Sat Feb 14 00:31:30 2009

এবং

$ tclsh
% clock format 1234567890
Sa Feb 14 00:31:30 CET 2009

6

আপনার সাথে বিল্টিন 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প্রয়োজন হলে)।


0

ডেটটাইম মুদ্রণের জন্য আপনি শেল দ্বারা সরাসরি পার্স করা যায় এমন ফর্ম্যাটটিতে একটি সামান্য সি প্রোগ্রাম ব্যবহার করতে পারেন

#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

0

সামান্য নোড.জেএস ব্যতীত আসল সমাধান হতে পারে না:

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>


0

এটি করার একটি সহজ উপায় আছে: (([সিস্টেম.ডেটটাইমঅফসেট] :: ফর্মউনিক্সটাইমিলি সেকেন্ডস ($ ইউনিক্সটাইম))। ডেটটাইম)। টোস্ট্রিং ("গুলি")


U&L এ স্বাগতম! দয়া করে, প্রশ্নের ট্যাগগুলি একবার দেখুন: এই কোডটি কিছু ইউনিক্স বা ইউনিক্স-জাতীয় সিস্টেমে কিছু শেলটিতে কাজ করে?
ফ্রে-সান

এই কৌশলটি মাইক্রোসফ্ট। নেট ব্যবহার করছে। দেখে মনে হচ্ছে না যে ওপি একটি এমএস সমাধান খুঁজছে।
ব্যবহারকারী 2320464
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.