"সোমবার 40" কোন তারিখটি হবে তা নির্ধারণের জন্য ডেট কমান্ডটি কীভাবে ব্যবহার করবেন?


11

"সোমবার 40" এর মতো কিছুকে আইএসও তারিখে রূপান্তর করতে আমি কীভাবে তারিখ আদেশটি ব্যবহার করতে পারি?

আমি এই জাতীয় কিছু নিয়ে খেলছি:

date --date='monday week 40' +'%Y-%m-%d'

এবং যে তারিখটি আমি সন্ধান করছি তা 2011-10-03 হবে 3

তবে আমার সমস্যাটি হ'ল এই তারিখের স্ট্রিংটি বৈধ নয়, সুতরাং এই সমস্যাটি সমাধান করার জন্য আমার আরও একটি পদ্ধতির প্রয়োজন।

/ ধন্যবাদ


নীচের লিঙ্কটি বছরের নির্ধারিত দিনটি কোন সংখ্যাযুক্ত সপ্তাহ শুরু হয় তা নির্ধারণ করে । সপ্তাহের নম্বর (উইকিপিডিয়া) .. এটি কার্যকরভাবে ব্যাখ্যা করে যে এই বছরের 1 জানুয়ারী আইএসও 52 সপ্তাহে কেন .. 'ব্যবহারকারী অজানা'%V দ্বারা ব্যবহৃত ফর্ম্যাট ক্রমটি আইএসও সপ্তাহের সংখ্যাটি রিপোর্ট করে।
পিটার.ও

উত্তর:


4

সত্যিই কুৎসিত এবং সম্ভবত কেবল জিএনইউতে কাজ করে date:

date -d "$( date -d "$( date +'%Y-01-01' ) +40 weeks") -$( date -d "$( date +'%Y-01-01' ) +40 weeks" +'%w' ) days+1 day" +'%Y-%m-%d'

কেবলমাত্র আপনার 3 অক্টোবর উদাহরণের জন্য পরীক্ষিত, অন্য কিছু ক্ষেত্রে ব্যর্থ হতে পারে।


আপডেট : আপনার যদি অ-ইঞ্জিন লোকেল থাকে তবে আপনাকে কাজ করতে অভ্যন্তরীণ তারিখ থেকে আউটপুট নির্দিষ্ট করতে হবে। (এবং% F কেবল YYYY-MM-DD)।

date -d "$(date -d "$(date +'%Y-01-01') +40 weeks" +"%F") -$(date -d "$(date +'%Y-01-01') +40 weeks" +%w) days +1 day" +"%F"

1
আপনি অভ্যন্তরীণ তারিখ থেকে আউটপুট ফর্ম্যাট করতে মিস করেছেন যাতে বাইরের এটি সঠিকভাবে ব্যবহার করতে পারে।
জোহান

@ জোহান, আমার ডিফল্ট ফর্ম্যাটটি ব্যবহার করতে সমস্যা হয়নি। সম্ভবত এটি স্থানীয় নির্দিষ্ট? আমি en_US ব্যবহার করি। যাইহোক ভাল পয়েন্ট।
manatwork

তারিখের জন্য আমি সুইডিশ লোকাল ব্যবহার করি, তাই পার্থক্য রয়েছে।
জোহান

লোকাল সামঞ্জস্যের জন্য ধন্যবাদ। আমার একটি কাস্টম ডেট ফর্ম্যাট আছে এবং একই সমস্যা ছিল .. আমি প্রায় এটি বাছাই করেছি, তবে এখন আপনি এটি পোস্ট করেছেন আমি আপনার টুইটটি ব্যবহার করব; এটা আরও ভাল।
পিটার.ও

এটি ওয়ান-লাইনার হওয়ার কোনও প্রয়োজন ছিল না। এটি কীভাবে কাজ করে তা পরিষ্কার করার জন্য বর্ণনামূলক নাম সহ অস্থায়ী ভেরিয়েবলগুলি ব্যবহার করে এটি একাধিক লাইনে বিভক্ত করা ভাল। এছাড়া ধরে নেয় যে জানুয়ারী 1st, প্রতি বছর একই সপ্তাহ সংখ্যা হয় যা ঘটনা না ইতিমধ্যে @ Peter.O দ্বারা হিসাবে উল্লিখিত।
অ্যাডাম স্পায়ার্স

5

একটি বিকল্প পদ্ধতির:

date --date "+$((40-$(date +%V)))weeks last monday"  +"%F"
  • 40 আপনি যে সপ্তাহে অনুসন্ধান করছেন
  • তারিখ +% ভি বর্তমান সপ্তাহে রিটার্ন দেয় (35)
  • 40-35 = 5, যা যোগ করতে সপ্তাহের সংখ্যা
  • সেখান থেকে শেষ সোমবার সন্ধান করুন

ভাল, এবং এটি আমার কাস্টম তারিখ সেটিংয়ের সাথে কাজ করে।
পিটার.ও

এটি একটি চতুর ধারণা, তবে এটি কার্যকর হয় না। উদাহরণস্বরূপ, আজ যদি সপ্তাহে 41 এ সোমবার হয় (অর্থাত্‍ date +%Vপ্রত্যাবর্তন 41), তবে --dateপ্যারামিটারের মানটি হবে +-1weeks last monday, যা 7 দিন আগে নয়, পাক্ষিক আগে।
অ্যাডাম স্পায়ার্স

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

@ অ্যাডামস্পিয়ার্স: আমার ক্যালেন্ডারটি 30 ই সেপ্টেম্বর, সোমবার 40 এ সোমবার প্রদর্শিত হয়, যা আমার আলগো ফলন দেয় (আজ)।
ব্যবহারকারী অজ্ঞাত

@ ইউজারুননড এর কারণ আপনি আজ নিজের কোডটি পরীক্ষা করছেন যা একটি মঙ্গলবার, যা সোমবারের পরে আসে। আপনি যদি গতকাল নিজের কোডটি পরীক্ষা করে দেখতেন তবে তা ভেঙে যেত। এটিকে আরও সুস্পষ্ট করার জন্য, চালানোর চেষ্টা করুন date -d 'last monday'। এটি গতকাল ফিরে আসবে। আপনি কি মনে করেন গতকাল যদি আপনি এটি চালাতেন তবে এটি কী বলত?
অ্যাডাম স্পায়ার্স

1

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

# sets $week_start to a representation of Monday of the given week
# number formatted via the given format, and similarly sets
# $week_end to Friday of the same week.
get_week_range () {
    week_num="$1" date_format="$2"

    # Most of the world adhere to ISO 8601 which states that weeks begin on Monday
    # and Jan 4th is always in week #1:
    #
    #   http://en.wikipedia.org/wiki/ISO_week_date
    #
    # For other week numbering systems (e.g. USA, Canada), see:
    #
    #   http://en.wikipedia.org/wiki/Seven-day_week#Week_numbering
    day_in_week_1=$( date +'%Y-01-04' )
    day_num_in_week_1=$( date -d $day_in_week_1 +%u ) # 1 is Monday
    days_from_week_1_start=$(( $day_num_in_week_1 - 1 ))
    # This is a Monday:
    start_of_week_1=$( date -d "$day_in_week_1 - $days_from_week_1_start days" +%F )

    week_delta="$(( $week_num - 1 ))"
    # Monday:
    week_start=$( date -d "$start_of_week_1 + $week_delta weeks"          +"$date_format" )
    # Friday:
    week_end=$(   date -d "$start_of_week_1 + $week_delta weeks + 4 days" +"$date_format" )
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.