তারিখ এবং ব্যাশ ব্যবহার করে সময় বিয়োগ করুন


18

এসই নেটওয়ার্কের অন্যান্য সমস্ত প্রশ্নের মধ্যে এমন পরিস্থিতি রয়েছে যেখানে তারিখটি now( প্রশ্ন ) বলে গণ্য করা হয় বা যেখানে কেবল একটি তারিখ নির্দিষ্ট করা হয় ( প্রশ্ন )।

আমি যা করতে চাই তা হল একটি তারিখ এবং সময় সরবরাহ করা এবং তারপরে একটি সময় বিয়োগ করা।
এখানে আমি প্রথমে চেষ্টা করেছি:

date -d "2018-12-10 00:00:00 - 5 hours - 20 minutes - 5 seconds"

এর ফলাফল 2018-12-10 06:39:55- এটি 7 ঘন্টা যোগ করেছে। তারপরে 20:05 মিনিট বিয়োগ করে।

এর পৃষ্ঠা manএবং infoপৃষ্ঠাটি পড়ার পরে date, আমি ভেবেছিলাম এটির সাথে এটি ঠিক করে রেখেছি:

date -d "2018-12-10T00:00:00 - 5 hours - 20 minutes - 5 seconds"

কিন্তু, একই ফলাফল। এটি 7 ঘন্টা এমনকি কোথায় পায়?

আমি অন্যান্য তারিখগুলিও চেষ্টা করেছিলাম কারণ আমি ভেবেছিলাম যে সেদিন আমাদের কাছে 7200 লিপ সেকেন্ড ছিল, কে জানো। তবে একই ফলাফল।

আরও কয়েকটি উদাহরণ:

$ date -d "2018-12-16T00:00:00 - 24 hours" +%Y-%m-%d_%H:%M:%S
2018-12-17_02:00:00

$ date -d "2019-01-19T05:00:00 - 2 hours - 5 minutes" +%Y-%m-%d_%H:%M:%S
2019-01-19_08:55:00

তবে এখানে এটি আকর্ষণীয় হয়ে ওঠে। আমি যদি ইনপুটটিতে সময়টি বাদ দিই তবে তা ঠিক কাজ করে:

$ date -d "2018-12-16 - 24 hours" +%Y-%m-%d_%H:%M:%S
2018-12-15_00:00:00

$ date -d "2019-01-19 - 2 hours - 5 minutes" +%Y-%m-%d_%H:%M:%S
2019-01-18_21:55:00

$ date --version
date (GNU coreutils) 8.30

আমি কী মিস করছি?

আপডেট: আমি Zশেষে একটি যোগ করেছি , এবং এটি আচরণটি পরিবর্তন করেছে:

$ date -d "2019-01-19T05:00:00Z - 2 hours" +%Y-%m-%d_%H:%M:%S
2019-01-19_04:00:00

যদিও আমি এখনও বিভ্রান্ত। তারিখ সম্পর্কে জিএনইউ তথ্য পৃষ্ঠায় এ সম্পর্কে খুব বেশি কিছু নেই ।

আমি অনুমান করছি এটি একটি সময় অঞ্চল সমস্যা, তবে আইএসও 8601 তে ক্যালেন্ডার উইকির উদ্ধৃতি দিচ্ছে :

যদি কোনও ইউটিসি সম্পর্কের তথ্য সময় উপস্থাপনের সাথে না দেওয়া হয়, তবে সময়টি স্থানীয় সময় হিসাবে ধরে নেওয়া হবে।

যা আমি চাই। আমার স্থানীয় সময়টিও সঠিকভাবে সেট করা আছে। আমি নিশ্চিত নই কেন তারিখটি আমার সাথে ডেটটাইম সরবরাহ করে এবং এর বাইরে কিছু বিয়োগ করতে চাইলে এই সাধারণ ক্ষেত্রে সময়সীমার সাথে কেন ঝামেলা করবে। এটি কি প্রথমে তারিখের স্ট্রিং থেকে ঘন্টাগুলি বিয়োগ করা উচিত নয়? এমনকি যদি এটি প্রথমে একটি তারিখে রূপান্তর করে এবং তার পরে বিয়োগ করে, এমনকি যদি আমি কোনও বিয়োগ বাদ দিই তবে আমি যা চাই ঠিক তা পাই:

$ date -d "2019-01-19T05:00:00" +%Y-%m-%d_%H:%M:%S
2019-01-19_05:00:00

সুতরাং যদি এটি সত্যিই একটি সময় অঞ্চল সমস্যা হয় তবে সেই উন্মাদনাটি কোথা থেকে আসে?


উত্তর:


20

যে শেষ উদাহরণ তোমাদের জন্য এমন জিনিস ব্যাখ্যা করা উচিত ছিল: সময়ের অঞ্চলগুলোকে

$ TZ=UTC date -d "2019-01-19T05:00:00Z - 2 hours" +%Y-%m-%d_%H:%M:%S
2019-01-19_03:00:00
$ TZ=Asia/Colombo date -d "2019-01-19T05:00:00Z - 2 hours" +%Y-%m-%d_%H:%M:%S 
2019-01-19_08:30:00

আউটপুট স্পষ্টভাবে সময় অঞ্চল অনুসারে পরিবর্তিত হওয়ায় আমি টাইমজোন নির্দিষ্ট না করে টাইম স্ট্রিংয়ের জন্য নেওয়া কিছু অ-সুস্পষ্ট ডিফল্টকে সন্দেহ করব। কয়েকটি মান পরীক্ষা করে দেখা হচ্ছে এটি ইউটিসি -05: 00 বলে মনে হচ্ছে, তবে এটি কী তা আমি নিশ্চিত নই।

$ TZ=UTC date -d "2019-01-19T05:00:00 - 2 hours" +%Y-%m-%d_%H:%M:%S%Z
2019-01-19_08:00:00UTC
$ TZ=UTC date -d "2019-01-19T05:00:00Z - 2 hours" +%Y-%m-%d_%H:%M:%S%Z
2019-01-19_03:00:00UTC
$ TZ=UTC date -d "2019-01-19T05:00:00" +%Y-%m-%d_%H:%M:%S%Z           
2019-01-19_05:00:00UTC

তারিখ গণিত সম্পাদন করার সময় এটি ব্যবহৃত হয়।


মনে হচ্ছে এখানে সমস্যাটি গাণিতিক হিসাবে নেওয়া - 2 hoursহয় নি , তবে টাইমজোন স্পেসিফায়ার হিসাবে নেওয়া হয়েছে :

# TZ=UTC date -d "2019-01-19T05:00:00 - 2 hours" +%Y-%m-%d_%H:%M:%S%Z --debug
date: parsed datetime part: (Y-M-D) 2019-01-19 05:00:00 UTC-02
date: parsed relative part: +1 hour(s)
date: input timezone: parsed date/time string (-02)
date: using specified time as starting value: '05:00:00'
date: starting date/time: '(Y-M-D) 2019-01-19 05:00:00 TZ=-02'
date: '(Y-M-D) 2019-01-19 05:00:00 TZ=-02' = 1547881200 epoch-seconds
date: after time adjustment (+1 hours, +0 minutes, +0 seconds, +0 ns),
date:     new time = 1547884800 epoch-seconds
date: timezone: TZ="UTC" environment value
date: final: 1547884800.000000000 (epoch-seconds)
date: final: (Y-M-D) 2019-01-19 08:00:00 (UTC)
date: final: (Y-M-D) 2019-01-19 08:00:00 (UTC+00)
2019-01-19_08:00:00UTC

সুতরাং, কেবল কোনও পাটিগণিতই করা হচ্ছে না, এমন সময় মনে হচ্ছে একটি দিবালোকের সঞ্চয় সময়টি 1 ঘন্টা সামঞ্জস্য করে যা আমাদের জন্য কিছুটা অযৌক্তিক সময়ের দিকে নিয়ে যায়।

এটি সংযোজনের জন্যও রয়েছে:

# TZ=UTC date -d "2019-01-19T05:00:00 + 5:30 hours" +%Y-%m-%d_%H:%M:%S%Z --debug
date: parsed datetime part: (Y-M-D) 2019-01-19 05:00:00 UTC+05:30
date: parsed relative part: +1 hour(s)
date: input timezone: parsed date/time string (+05:30)
date: using specified time as starting value: '05:00:00'
date: starting date/time: '(Y-M-D) 2019-01-19 05:00:00 TZ=+05:30'
date: '(Y-M-D) 2019-01-19 05:00:00 TZ=+05:30' = 1547854200 epoch-seconds
date: after time adjustment (+1 hours, +0 minutes, +0 seconds, +0 ns),
date:     new time = 1547857800 epoch-seconds
date: timezone: TZ="UTC" environment value
date: final: 1547857800.000000000 (epoch-seconds)
date: final: (Y-M-D) 2019-01-19 00:30:00 (UTC)
date: final: (Y-M-D) 2019-01-19 00:30:00 (UTC+00)
2019-01-19_00:30:00UTC

আরও কিছুটা ডিবাগ করলে, পার্সিংটি মনে হয়: 2019-01-19T05:00:00 - 2( -2টাইমজোন হচ্ছে), এবং hours(= 1 ঘন্টা), অন্তর্নিহিত সংযোজন সহ। পরিবর্তে আপনি মিনিট ব্যবহার করেন কিনা তা দেখতে আরও সহজ হয়ে যায়:

# TZ=UTC date -d "2019-01-19T05:00:00 - 2 minutes" +%Y-%m-%d_%H:%M:%S%Z --debug
date: parsed datetime part: (Y-M-D) 2019-01-19 05:00:00 UTC-02
date: parsed relative part: +1 minutes
date: input timezone: parsed date/time string (-02)
date: using specified time as starting value: '05:00:00'
date: starting date/time: '(Y-M-D) 2019-01-19 05:00:00 TZ=-02'
date: '(Y-M-D) 2019-01-19 05:00:00 TZ=-02' = 1547881200 epoch-seconds
date: after time adjustment (+0 hours, +1 minutes, +0 seconds, +0 ns),
date:     new time = 1547881260 epoch-seconds
date: timezone: TZ="UTC" environment value
date: final: 1547881260.000000000 (epoch-seconds)
date: final: (Y-M-D) 2019-01-19 07:01:00 (UTC)
date: final: (Y-M-D) 2019-01-19 07:01:00 (UTC+00)
2019-01-19_07:01:00UTC

সুতরাং, ভাল, তারিখ পাটিগণিত করা হচ্ছে, আমরা যা চেয়েছিলাম তা নয়। ¯ \ (ツ) / ¯


1
@ কনফেট্টি এটি সত্যিই করে; আমি মনে করি এই ডিফল্ট TZ=UTC date -d "2019-01-19T05:00:00Z - 2 hours" +%Y-%m-%d_%H:%M:%STZ=UTC date -d "2019-01-19T05:00:00 - 2 hours" +%Y-%m-%d_%H:%M:%S
টাইমজোনটি

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

1
@ কনফেটি সমস্যাটি খুঁজে পেয়েছে: - 2 hoursএখানে টাইমজোন নির্দিষ্টকারক হিসাবে নেওয়া হয়েছে।
ওলরিন

2
কি দারুন. এখন যে একরকম বোঝা যায়। ভাল, অন্তত এটি এটি ব্যাখ্যা করে। এটি বের করার জন্য আপনাকে অনেক ধন্যবাদ। আমার কাছে মনে হচ্ছে তাদের পার্সারের কোনও আপডেট হওয়া দরকার যদিও স্পষ্টভাবে ফর্ম্যাট এবং শ্বেত স্পেসের সাথে আপনি `- 2 ঘন্টা` টাইমজোনটি নির্দিষ্ট করতে চান না এবং এটি অবশ্যই বিভ্রান্তির সৃষ্টি করে। তারা যদি পার্সার আপডেট করতে না চান তবে কমপক্ষে ম্যানুয়ালটি এই সম্পর্কে একটি নোট পাওয়া উচিত।
কনফেটটি

1
আজ আমি তারিখের --debugবিকল্প সম্পর্কে শিখেছি ! দুর্দান্ত ব্যাখ্যা।
জেফ স্ক্যালার হলেন

6

আপনি ইনপুট তারিখটি প্রথমে আইএসও 8601 এ রূপান্তর করলে এটি সঠিকভাবে কাজ করে:

$ date -d "$(date -Iseconds -d "2018-12-10 00:00:00") - 5 hours - 20 minutes - 5 seconds"
So 9. Dez 18:39:55 CET 2018

আপনাকে ধন্যবাদ, এটি সত্যই কাজ করে, তবে এর কোনও ব্যাখ্যা আছে কি? আমি আমার প্রশ্নে আইএসও 8601 জিনিসটি সম্পর্কে আরও কিছু তথ্য যুক্ত করেছি এবং সত্যিকার অর্থে আমি দেখছি না যে dateকোনও বিয়োগ বিহীনভাবে এটিকে জগাখিচু করে ফেলবে, টাইমজোনটি আউটচুড রেখে দেওয়া হয়েছে এবং কোনও সরবরাহ না করেই সবকিছু প্রত্যাশা মতোই রয়েছে সময় অঞ্চল তথ্য বা রূপান্তর।
কনফেটটি

আমি বলতে পারি না, দুঃখিত। এর উত্তর যদি অন্য কেউ দিতে পারে তবে আমি খুশি হব কারণ আমিও ভাবছিলাম।
পিএমলোম

আমিও খুশি হব তবে আমি আপাতত এটি গ্রহণ করব কারণ এটি আমার সমস্যার সমাধান করে!
কনফেটটি

3
এটি কাজ করে কারণ date -Iটাইমজোন স্পেসিফায়ার (উদাহরণস্বরূপ 2018-12-10T00:00:00+02:00) আউটপুট দেয় যা ওলরিনের উত্তরে
ইলক্কাচু

6

টিএলডিআর: এটি কোনও বাগ নয়। আপনি এর মধ্যে একটি সূক্ষ্ম তবে নথিভুক্ত আচরণ খুঁজে পেয়েছেন date। সময় গাণিতিক পারফর্ম করার সময়date , অঞ্চল-স্বতন্ত্র ফর্ম্যাট (ইউনিক্সের মতো) ব্যবহার করুন বা খুব পড়ুন ব্যবহার করুন বা এই আদেশটি কীভাবে সঠিকভাবে ব্যবহার করতে হয় তা জানতে ডকুমেন্টেশন সাবধানে ।


GNU dateআপনার সিস্টেম সেটিংস ব্যবহার করে ( TZপরিবেশ পরিবর্তনশীল বা যদি সেট না করা থাকে তবে সিস্টেম ডিফল্ট হয়) -d/ --dateবিকল্পের সাথে খাওয়ানো তারিখ এবং +formatআর্গুমেন্টের দ্বারা প্রতিবেদন করা তারিখের উভয়টির সময়সীমা নির্ধারণ করতে । বিকল্প এছাড়াও আপনি নিজস্ব বিকল্প-যুক্তি জন্য সময় অঞ্চল ওভাররাইড দিন কিন্তু এটি সময় অঞ্চল ওভাররাইড নেই এই বিভ্রান্তির মূল, আইএমএইচও।--date+format

আমার টাইমজোনটি ইউটিসি -6 হ'ল বিবেচনা করে, নিম্নলিখিত আদেশগুলি তুলনা করুন:

$ date -d '1970-01-01 00:00:00' '+Normal: %F %T %:z%nUnix: %s'
Normal: 1970-01-01 00:00:00 -06:00
Unix: 21600
$ date -d '1970-01-01 00:00:00 UTC' '+Normal: %F %T %:z%nUnix: %s'
Normal: 1969-12-31 18:00:00 -06:00
Unix: 0
$ TZ='UTC0' date -d '1970-01-01 00:00:00 UTC' '+Normal: %F %T %:z%nUnix: %s'
Normal: 1970-01-01 00:00:00 +00:00
Unix: 0

প্রথম এক উভয়ের জন্য আমার সময় অঞ্চল ব্যবহার -dএবং +format। দ্বিতীয়টি ইউটিসি ব্যবহার করে -dতবে আমার টাইমজোন এর জন্য+format । তৃতীয়টি উভয়ের জন্য ইউটিসি ব্যবহার করে।

এখন, নিম্নলিখিত সহজ অপারেশন তুলনা করুন:

$ date -d '1970-01-01 00:00:00 UTC +1 day' '+Normal: %F %T %:z%nUnix: %s'
Normal: 1970-01-01 18:00:00 -06:00
Unix: 86400
$ TZ='UTC0' date -d '1970-01-01 00:00:00 UTC +1 day' '+Normal: %F %T %:z%nUnix: %s'
Normal: 1970-01-02 00:00:00 +00:00
Unix: 86400

এমনকি ইউনিক্স সময় আমাকে একই কথা বললেও, আমার নিজস্ব সময় অঞ্চল বলেই "সাধারণ" সময়টি আলাদা হয় dif

যদি আমি একই অপারেশন করতে চাইতাম তবে একচেটিয়াভাবে আমার টাইমজোনটি ব্যবহার করতাম:

$ TZ='CST+6' date -d '1970-01-01 00:00:00 -06:00 +1 day' '+Normal: %F %T %:z%nUnix: %s'
Normal: 1970-01-02 00:00:00 -06:00
Unix: 108000

4
যুগ / ইউনিক্স সময়ের উল্লেখের জন্য উত্সাহিত, যা ইমো সময় গণিত করার একমাত্র বুদ্ধিমান উপায়
রুই এফ রিবেইরো

1
টিএল; ডিআর আপনি যদি নিজের স্থানীয় সময়টি জুলু সময় থেকে অফসেটে জানেন (উদাহরণস্বরূপ পশ্চিম উপকূলের মার্কিন যুক্তরাষ্ট্র -8 ঘন্টা বা -08:00), কেবল ইনপুট তারিখ-সময়কে সংযুক্ত করুন ... এর সাথে মজাদার কিছু নয়। উদাহরণ: স্থানীয়date -d '2019-02-28 14:05:36-08:00 +2 days 4 hours 3 seconds' +'local: %F %T' দেয় : 2019-03-02 18:05:36
বি লেয়ার

1
@ ব্লায়ার আপনি ঠিক বলেছেন, এটি সেই দৃশ্যে প্রত্যাশা অনুযায়ী কাজ করে। তবে সেই পরিস্থিতিটি কল্পনা করুন যেখানে সেই পদ্ধতির সাহায্যে প্রদত্ত লিপিটি কোনও আলাদা টাইমজোন সহ কোনও জায়গায় কার্যকর করা হয়। প্রযুক্তিগতভাবে সঠিক হলেও আউটপুটটি +formatআর্গুমেন্টের দ্বারা প্রদত্ত তথ্যের উপর নির্ভর করে ভুল দেখতে পারে। উদাহরণ হিসেবে বলা যায়, আমার সিস্টেমে একই কমান্ড আউটপুট: local: 2019-03-02 20:05:39(যদি আমি যোগ %:zকরতে +format, এটি সুস্পষ্ট হয়ে যায় যে তথ্য সঠিক এবং অমিল সময়ের অঞ্চলগুলোকে কারণে)।
এনএক্সনেভ

@ ব্লায়ার আইএমএইচও, অপ্রত্যাশিত ফলাফল এড়ানোর জন্য উত্তরের হিসাবে যেমনটি আমি উত্তর হিসাবে বলেছিলাম -dএবং +formatইউনিক্স উভয়ের জন্য একই টাইমজোন ব্যবহার করা আরও ভাল সাধারণ পদ্ধতির হবে ।
এনএক্সনেভ

1
@ এনএক্সনেভ সম্মত হন, আপনি প্রকাশিত / ভাগ করার জন্য যদি কোনও স্ক্রিপ্ট লিখছেন। আক্ষরিক অর্থ ছাড়াও "আপনি যদি নিজের সময় অঞ্চলটি জানেন তবে" শুরুর শব্দগুলি নৈমিত্তিক / ব্যক্তিগত ব্যবহার বোঝায়। কেউ কেবল নিজের সিস্টেমের টিজে জেনে যেমন স্বল্প সময়ে কিছুতে নির্ভর করে কোনও স্ক্রিপ্ট প্রকাশ করছেন সম্ভবত স্ক্রিপ্ট ভাগ করে নেওয়ার খেলায় তা হওয়া উচিত নয়। :) অন্যদিকে আমি আমার সমস্ত ব্যক্তিগত পরিবেশে নিজস্ব কমান্ডটি ব্যবহার / করব।
বি লেয়ার

4

গনুহ date সাধারণ তারিখ গণিতকে সমর্থন করে, যদিও @ সুডডাসের উত্তরে বর্ণিত যুগের সময় গণনাগুলি মাঝে মাঝে পরিষ্কার (এবং আরও বহনযোগ্য) হয়।

+ /- ব্যবহারের সময় যখন টাইমস্ট্যাম্পে নির্দিষ্ট সময় অঞ্চলটি নির্দিষ্ট না করে, অন্য কোনও কিছু বিশ্লেষণের আগে, পরবর্তী টাইমজোনটির সাথে মিলের প্রেরণাকে ট্রিগার করে।

এটি করার একটি উপায় এখানে "-" এর পরিবর্তে "পূর্বে" ব্যবহার করুন:

$ date -d "2018-12-10 00:00:00 5 hours ago 20 minutes ago 5 seconds ago"
Sun Dec  9 18:39:55 GMT 2018

অথবা

$ date -d "2018-12-10 00:00:00Z -5 hours -20 minutes -5 seconds"
Sun Dec  9 18:39:55 GMT 2018

(যদিও আপনি নির্বিচারে "জেড" ব্যবহার করতে পারবেন না, এটি আমার জোনে কাজ করে তবে এটি একে ইউটিসি / জিএমটি জোন টাইমস্ট্যাম্প তৈরি করে - আপনার নিজস্ব অঞ্চল বা% z /% Z যুক্ত করে ${TZ:-$(date +%z)} পরিবর্তে টাইমস্ট্যাম্পে ব্যবহার করে))

এই ফর্মগুলির অতিরিক্ত সময়ের শর্তাদি সময় সমন্বয় করে:

  • "5 ঘন্টা আগে" 5 ঘন্টা বিয়োগ করুন
  • "4 ঘন্টা" যুক্ত (অন্তর্ভুক্ত) 4 ঘন্টা
  • "3 ঘন্টা তাই" যোগ করুন (স্পষ্ট) 3 ঘন্টা (পুরানো সংস্করণগুলিতে সমর্থিত নয়)

অনেক জটিল সমন্বয়, যে কোনও ক্রমে, ব্যবহার করা যেতে পারে (যদিও "14 সপ্তাহ তাই গত সোমবার" এর মতো আপেক্ষিক এবং পরিবর্তনীয় পদগুলি সমস্যার জন্য জিজ্ঞাসা করছে ;-)

(এখানে আরও একটি ছোট beartrap আছে, dateসর্বদা একটি বৈধ তারিখ দেবে, তাই date -d "2019-01-31 1 month"2019-03-03 দেয়, "পরের মাসে" হিসাবে দেয়)

সমর্থিত বিভিন্ন সময় এবং তারিখের ফর্ম্যাটগুলির প্রদত্ত সময়সীম পার্সিং অগত্যা slড়ু: এটি একটি একক বা বহু-অক্ষর প্রত্যয়, এক ঘন্টা বা ঘন্টা: মিনিট অফসেট, একটি নাম "আমেরিকা / ডেনভার" (অথবা একটি ফাইলের নামও হতে পারে) TZপরিবর্তনশীল ক্ষেত্রে )।

তোমার 2018-12-10T00:00:00 সংস্করণটি কাজ করে না কারণ "টি" কেবলমাত্র একটি সীমান্তকারক, টাইমজোন নয়, শেষে "জেড" যুক্ত করাও সেই কাজটিকে (নির্বাচিত অঞ্চলের নির্ভুলতার সাপেক্ষে) আশানুরূপ করে তোলে।

দেখুন: https://www.gnu.org/software/tar/manual/html_node/Date-input-formats.html এবং বিশেষ বিভাগে 7.7।


1
অন্যান্য অপশন অন্তর্ভুক্ত: date -d "2018-12-10 00:00:00 now -5 hoursঅথবা todayঅথবা 0 hourপরিবর্তে now, কিছু যে বলে dateযে সময় পরে টোকেন একটি সময় অঞ্চল অফসেট নয়।
স্টাফেন চেজেলাস

1
বা, পুঙ্খানুপুঙ্খতার জন্য, তর্কগুলি পুনরায় অর্ডার করে তারিখ-সময়ের পরে কিছুই রাখবেন না: তারিখ -d "-5 ঘন্টা 2018-12-10 00:00:00" `
বি লেয়ার

2

এই সমাধানটি বোঝা সহজ, তবে আরও জটিল, তাই আমি এটি শেলসক্রিপ্ট হিসাবে দেখায় show

  • 1970-01-01 00:00:00 ইউটিসি থেকে 'সেকেন্ডে রূপান্তর করুন
  • পার্থক্য যোগ বা বিয়োগ
  • একটি চূড়ান্ত dateকমান্ড লাইনের সাহায্যে একটি মানব পাঠযোগ্য বিন্যাসে ফিরে রূপান্তর করুন

হোস্টনেম:

#!/bin/bash

startdate="2018-12-10 00:00:00"

ddif="0"          # days
diff="-5:-20:-5"  # hours:minutes:seconds

#-----------------------------------------------------------------------------

ss1970in=$(date -d "$startdate" "+%s")  # seconds since 1970-01-01 00:00:00 UTC
printf "%11s\n" "$ss1970in"

h=${diff%%:*}
m=${diff#*:}
m=${m%:*}
s=${diff##*:}
difs=$(( (((ddif*24+h)*60)+m)*60+s ))
printf "%11s\n" "$difs"

ss1970ut=$((ss1970in + difs))  # add/subtract the time difference
printf "%11s\n" "$ss1970ut"

date -d "@$ss1970ut" "+%Y-%m-%d %H:%M:%S"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.