টাইমস্প্যান টোস্ট্রিং ফর্ম্যাট


95

শুধু কৌতূহলী, "5h 3m 30s" এর মতো কিছু আউটপুট ব্যবহার করতে আমি কি কোনও বিন্যাসের স্ট্রিং ব্যবহার করতে পারি?

যেমন (স্পষ্টত ভুল)

myTimeSpan.ToString("hh mm ss")

উত্তর:


144

চেষ্টা করুন:

myTimeSpan.ToString("h'h 'm'm 's's'")

(দ্রষ্টব্য যে এমনকি স্পেসগুলিও উদ্ধৃত করা দরকার - এটিই আমার প্রথম প্রয়াসে ভুল ছিল))

আমি ধরে নিচ্ছি আপনি নেট নেট 4 ব্যবহার করছেন অবশ্যই - এর আগে TimeSpanকাস্টম ফর্ম্যাট স্ট্রিং সমর্থন করে না।

সম্পাদনা: যেমন উল্লেখ করা হয়েছে, এটি 24 ঘন্টা অতিক্রম করবে না। এছাড়াও মনে রাখবেন বিকল্প মাধ্যমে উপলব্ধ নোদা সময় খুব :)


5
ডাইমেনশনের উত্তরটি দেখুন, কারণ এটি 24 ঘন্টা বা তার বেশি সময়ের সঠিকরূপে ফর্ম্যাট করবে না।
— স্কট

"dd'd 'hhh' mm'm '" - এটি আমার পক্ষে কাজ করে। অ্যাকাউন্টে বিবেচনা করুন যে আপনাকে অ্যাডাস্ট্রোফসের সাহায্যে ফর্ম্যাট করা পাঠ্যটি আবৃত করতে হবে: "ডিড'ডেস ব্যয় '। এখানে ডিডি হ'ল ডেটা এবং 'দিনগুলি আপনার নিজের পাঠ্য'
— কাটিয়ে উঠেছে

38

এই জাতীয় কোড সহ জোন স্কিটের উত্তর ব্যবহার করার সময় এটি সম্পর্কে সচেতন হন:

// 12 days, 23 hours, 24 minutes, 2 seconds.
TimeSpan span = new TimeSpan(12, 23, 24, 2);
// 27 hours, 24 minutes, 2 seconds
TimeSpan span2 = new TimeSpan(27,24,2);

string format = span.ToString("h'h 'm'm 's's'");
string format2 = span2.ToString("h'h 'm'm 's's'");
Console.WriteLine(format);
Console.WriteLine(format2);
Console.ReadLine();

আপনি এর মতো ফলাফল পান:

23h 24m 2s
3h 24m 2s

ঘন্টা বিন্যাস সর্বোচ্চ 23 ঘন্টা প্রদর্শন করতে পারে। এটি 27 ঘন্টা দেখায় না বা 12 দিনকে ঘন্টার মধ্যে রূপান্তর করবে না, এটি কেবল তাদের কেটে ফেলবে যেন তাদের অস্তিত্ব কখনও নেই।

এটির সমাধানের একটি উপায় হ'ল একটি এক্সটেনশন তৈরি করা যা টাইমস্প্যানের দৈর্ঘ্য পরীক্ষা করে এবং টাইমস্প্যানটি এক বছর, দিন, ect এর বেশি হলে তার উপর ভিত্তি করে ফর্ম্যাটিং তৈরি করে। অথবা আপনি কেবল সর্বদা দিনগুলি পাশাপাশি প্রদর্শন করতে পারেন কারণ তারা কখনই কাটেনি:

string newFormat = span.ToString("d'd 'h'h 'm'm 's's'");

মনে রাখবেন আমি প্রোগ্রামিংয়ের একজন শিক্ষানবিস। এটি কেবল পর্যবেক্ষণগুলি থেকে আসে যখন আমি অনুগ্রহ করে এটি লক্ষ্য করতে পেরেছিলাম যে এটি সমস্ত ঘন্টা প্রদর্শন করবে after আমি এটি বলছি কারণ আমি জানি না এর চেয়ে আরও ভাল সমাধান আছে কি না, অন্য এক ঘন্টা বিন্যাসের মতো যা অন্তহীন ঘন্টা প্রদর্শন করতে পারে।

তবে আমি মনে করি এই ফর্ম্যাটটি এর উদ্দেশ্যযুক্ত কার্যকারিতা করছে। আপনি এটি সম্পর্কে সচেতন হতে হবে। এইভাবে এই পোস্ট। জন স্কিটির জবাব কখনই নির্দেশিত করে নি যে এই ফর্ম্যাটটি কেবলমাত্র তারিখের ধরণের বিন্যাসের ঘন্টা ঘন্টার বৈশিষ্ট্য দেখাতে হবে যেখানে ঘন্টা সর্বাধিক 23 হতে পারে।


15
এই কারণেই আপনার TotalHoursটাইমস্প্যানে ইত্যাদি রয়েছে। আপনি সম্ভবত এটি চেয়েছিলেনMath.Floor(span.TotalHours) + span.ToString("'h 'm'm 's's'")
— এক্সিমিলি

17

আপনি দুর্ভাগ্যজনক হলে নেট .4 ব্যবহার করবেন না:

string.Format("{0}h{1}m{2}s",
    myTimeSpan.Hours,
    myTimeSpan.Minutes,
    myTimeSpan.Seconds);

9
যে কোডের জন্য> 24 ঘন্টা সমর্থন করা প্রয়োজন, তার জন্য এই সমাধানটি TotalHoursএখনও। নেট এর নতুন সংস্করণে যাওয়ার উপায়।
— কোডসইনচাউস

4
আপনি আসলে এটি বিশ্বাস করতে পারছেন বলে আমি আসলে এটি আরও ভাল পাই।
— ক্রিস মেরিসিক

সতর্কতা অবলম্বন করে যদি এটি ব্যবহার করা TotalHoursহয় তবে এটি doubleকোনও intপছন্দ Hoursনয়, অর্থাত্ এটি ঘন্টা এবং পুরো ঘন্টাগুলি ভগ্নাংশ দেখায়।
— জিন্লি

6

সংক্ষিপ্তকরণ সম্পর্কে:

String oTime = myTimeSpan.ToString("h") + "h " +
               myTimeSpan.ToString("m") + "m " +
               myTimeSpan.ToString("s") + "s "

আপডেট 1:

আপনি একক উদ্ধৃতি দিয়ে এড়াতে পারেন: h'h 'm'm 's's'


11
আপনি সংযুক্তকরণের ব্যবহার করতে যাচ্ছেন, তাহলে আপনি হিসাবে ভাল ব্যবহার হতে পারে Hours, Minutes, Secondsবৈশিষ্ট্য আইএমও। উদ্ধৃতিটি বের করার পরে আমি ব্যক্তিগতভাবে কাস্টম ফর্ম্যাট স্ট্রিংটি ব্যবহার করব।
— জন স্কিটি

6

এই সামান্য কোডটি পার্স এবং বিপরীত দিকে ফিরে আসার জন্য সহায়তা করে:

        var t = TimeSpan.FromMilliseconds(450780);

        double d1 = t.TotalSeconds;


        string t3 = t.ToString(@"hh\:mm\:ss\.f",null);


        var tt = TimeSpan.ParseExact(t3, @"hh\:mm\:ss\.f",null);
        double d2 = tt.TotalSeconds;

টাইমস্প্যান পার্সের জন্য রেফারেন্স


5

অন্যান্য সমস্ত উত্তর এখানে চেষ্টা করার পরেও আমি ব্যবহার করেছি Xamarinএবং .NET Portable 4.5এটিই একমাত্র ফর্ম্যাট:

timespan.ToString("hh':'mm':'ss");

মূলত :এগুলি থেকে বাঁচতে আমি একক উদ্ধৃতি দিচ্ছি।


2

আমি মাঝেমধ্যে ফর্ম্যাট স্ট্রিংগুলিকে কিছুটা রেজিজেসের মতো দেখতে পাই, এর পরে যখন আমি কোডটিতে ফিরে আসি, আমি সংক্ষিপ্তসারগুলি ভুলে যাই। অতএব আমি নিম্নলিখিতগুলি নিয়ে চলেছি, যা আমাকে ডকুমেন্টেশন ফেরত পাঠানোর সম্ভাবনা কম:

string FormatTimeSpan(TimeSpan timeSpan) =>
    $"{Math.Floor(timeSpan.TotalHours)}h {timeSpan.Minutes}m {timeSpan.Seconds}s";

স্ট্রিং ইন্টারপোলেশন, সি # 6 তে প্রবর্তিত, এটি অন্যথায় হওয়া থেকে অনেক বেশি পরিষ্কার করে দিচ্ছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.