C # का उपयोग करके "hh: mm Am / Pm" प्रारूप में समय अवधि मान परिवर्तित करें


82

मेरे पास System.TimeSpanनिम्न प्रकार के चर में संग्रहित मूल्य है।

System.TimeSpan storedTime = 03:00:00;

क्या मैं इसे Stringनिम्न प्रकार के दूसरे चर में स्टोर कर सकता हूं ?

String displayValue = "03:00 AM";

और अगर storedTimeवैरिएबल का मान है

storedTime = 16:00:00;

तो यह करने के लिए परिवर्तित किया जाना चाहिए:

String displayValue = "04:00 PM";

जवाबों:


191

आप तिथि में अपने समय को जोड़कर ऐसा कर सकते हैं।

TimeSpan timespan = new TimeSpan(03,00,00);
DateTime time = DateTime.Today.Add(timespan);
string displayTime = time.ToString("hh:mm tt"); // It will give "03:00 AM"

क्या इस बूटस्ट्रैप तिथि पिकर से डिफ़ॉल्ट समय जोड़ना संभव है जैसे datepicker value + TimeofDay:?
— शैजू टी

1
ध्यान दें कि यह होगा हमेशा देने के 12-घंटे घड़ी एक AM / PM उपसर्ग के साथ समय। यदि आप किसी दिए गए संस्कृति का पालन करना चाहते हैं, तो आप ShortTimePatternइसके बजाय उपयोग कर सकते हैं :string displayTime = time.ToString("t" [, culture]);
— स्फिंक्सएक्स

1
या आप बस कॉल कर सकते हैंtime.ToShortTimeString()
— मर्दोक

time.ToShortTimeString () पूर्ववर्ती 0 को 03:00 बजे तक बनाए नहीं रखता है। time.ToString ("hh: mm tt") इसका ध्यान रखता है
— सौविक बसु

मैं किसी भी तारीख के बिना TimeSpan चाहता हूं, शायद कोई फर्क नहीं पड़ता है, लेकिन आप आज की तारीख को बांधते हैं और यह उचित नहीं है। स्ट्रिंग की तरह का उपयोग करते हुए। (@ "{0: hh \: mm \: ss}", timespan) बेहतर है, लेकिन मैं डॉन 't
— जानिए

13

स्ट्रिंग प्रारूप का उपयोग करके बहुत सरल है

पर .ToSTring("") :

  • यदि आप "hh" का उपयोग करते हैं - >> घंटे, 01 से 12 तक 12 घंटे की घड़ी का उपयोग करते हुए।

  • यदि आप "एचएच" का उपयोग करते हैं - >> घंटे, 00 से 23 तक 24 घंटे की घड़ी का उपयोग करते हुए।

  • यदि आप "tt" जोड़ते हैं - >> Am / Pm पदनाम।

छूट 23:12 से 11:12 बजे तक परिवर्तित:

DateTime d = new DateTime(1, 1, 1, 23, 12, 0);
var res = d.ToString("hh:mm tt");   // this show  11:12 Pm
var res2 = d.ToString("HH:mm");  // this show  23:12

Console.WriteLine(res);
Console.WriteLine(res2);

Console.Read();

एक दूसरी प्रतीक्षा करें जो आपको किसी और चीज़ की परवाह करने की ज़रूरत नहीं है, सिस्टम कल्चर है क्योंकि एक ही कोड को अन्य लैंगेज के साथ खिड़कियों पर निष्पादित किया जाता है, विशिष्ट संस्कृति लैंगेज के साथ विशिष्ट रूप से एक ही कोड के साथ भिन्न परिणाम उत्पन्न करेगा

अरबी लैंगेज कल्चर पर सेट की गई खिड़कियों की छूट इस तरह दिखाई देगी:

// 23:12 हे

م का अर्थ है इवनिंग (مسا। का पहला अक्षर)।

एक और प्रणाली संस्कृति में यह निर्भर करता है कि विंडोज़ क्षेत्रीय और भाषा विकल्प पर क्या सेट है, यह // 23:12 du दिखाएगा।

आप विंडोज़ क्षेत्रीय और भाषा के तहत विंडोज़ कंट्रोल पैनल पर अलग-अलग प्रारूप के बीच बदल सकते हैं -> वर्तमान प्रारूप (कॉम्बोक्स) और परिवर्तन ... इसे अपने ऐप का पुनर्निर्माण (निष्पादित) करें और देखें कि मैं क्या बात कर रहा हूं।

तो क्या मैं अंग्रेजी घटना में एम और पीएम शब्द दिखाने के लिए मजबूर कर सकता हूं यदि वर्तमान प्रणाली की संस्कृति अंग्रेजी में सेट नहीं है?

केवल दो पंक्तियों को जोड़कर आसान: ->

पहला कदम using System.Globalization;अपने कोड के शीर्ष पर जोड़ें

और पिछले कोड को इस तरह से संशोधित करना:

DateTime d = new DateTime(1, 1, 1, 23, 12, 0);
var res = d.ToString("HH:mm tt", CultureInfo.InvariantCulture); // this show  11:12 Pm

InvariantCulture => डिफ़ॉल्ट अंग्रेजी प्रारूप का उपयोग करना।

एक और सवाल मैं चाहता हूं कि दोपहर को अरबी या विशिष्ट भाषा में होना चाहिए, भले ही मैं अंग्रेजी (या अन्य भाषा) क्षेत्रीय प्रारूप पर सेट की गई खिड़कियों का उपयोग करूं?

अरबी छूट के लिए Soution:

DateTime d = new DateTime(1, 1, 1, 23, 12, 0);
var res = d.ToString("HH:mm tt", CultureInfo.CreateSpecificCulture("ar-AE")); 

यह // 23:12 م दिखाएगा

यदि मेरा सिस्टम एक अंग्रेजी क्षेत्र प्रारूप में सेट है तो घटना। यदि आप किसी अन्य भाषा प्रारूप में चाहते हैं तो आप "ar-AE" बदल सकते हैं। प्रत्येक भाषा और उसके प्रारूप की एक सूची है।

उदाहरण: ar-SA अरबी ar-BH ar-BH अरबी (बहरीन) ar-DZ ar-DZ अरबी (अल्जीरिया) ar-EG ar-EG अरबी (मिस्र)


5
TimeSpan के बारे में पूछा गया प्रश्न। यह उत्तर डेटाइम के लिए है।
— Thelem

11

आप जोड़ सकते हैं TimeSpanएक करने के लिए DateTime, उदाहरण के लिए:

TimeSpan span = TimeSpan.FromHours(16);
DateTime time = DateTime.Today + span;
String result = time.ToString("hh:mm tt");

डेमो: http://ideone.com/veJ6tT

04:00 PM

मानक दिनांक और समय प्रारूप स्ट्रिंग्स


धन्यवाद, घंटे के बाद मैंने कोशिश की 11:57 pmऔर यह काम किया: TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
— Shaiju T

10
string displayValue="03:00 AM";

यह समय का एक बिंदु है , अवधि (टाइमस्पैन) नहीं।

तो आपके मूल डिजाइन या मान्यताओं के साथ कुछ गलत है।

यदि आप इसका उपयोग करना चाहते हैं, तो आपको इसे पहले डेटटाइम (समय में बिंदु) में बदलना होगा। आप दिनांक भाग के बिना किसी दिनांक समय को प्रारूपित कर सकते हैं, यह आपका वांछित स्ट्रिंग होगा।

TimeSpan t1 = ...;
DateTime d1 = DateTime.Today + t1;               // any date will do
string result = d1.ToString("hh:mm:ss tt");

storeTime चर का मान हो सकता है
storeTime=16:00:00;

नहीं, इसका मान 4 बजे हो सकता है, लेकिन प्रतिनिधित्व द्विआधारी है, एक TimeSpan 16:00और के बीच अंतर रिकॉर्ड नहीं कर सकता है 4 pm।


11
यह दुर्भाग्यपूर्ण है कि DateTime.TimeOfDayएक रिटर्न TimeSpan- Microsoft आपको इस डिजाइन की ओर ले जाता है :(
— जॉन स्कीट

2
@JonSkeet मुझे नहीं पता कि यह सबसे खराब डिजाइन है (और मुझे पता है कि आप इस मामले पर एक मजाक कर रहे हैं, सम्मान से, नोदा पर आपके काम को देखते हुए), यह व्याख्या की सीमाओं को समझने का विषय है। किसी रिश्तेदार की कोई अवधारणा नहीं है DateTime, अगर वहाँ था, तो यह ("03:00 AM") बस उसी का एक उदाहरण होगा। हालाँकि, मैं देख सकता हूँ कि अधिकांश उपयोग के मामलों के लिए, यह डिज़ाइन (एक रिश्तेदार DateTime) मुद्दों को पूरा करेगा (बेशक, यह तारीखों, समय, निरपेक्ष या नहीं के आसपास बहुत विशिष्ट कार्य करने के लिए इसे और अधिक जटिल बनाने की कीमत पर है) ,
— टाइमज़ोन

7
@casperOne: मौलिक रूप से यह एक प्रकार की सूचना का प्रतिनिधित्व करने के लिए उपयोग कर रहा है, जो तार्किक रूप से एक अलग प्रकार में संग्रहीत किया जाएगा, सिर्फ इसलिए कि यदि आप पर्याप्त कठिन हैं तो वे समान दिखते हैं। मैं आगेDateTime भी इसका अर्थ ओवरलोड करने का सुझाव नहीं दूंगा (यह पहले से ही काफी खराब है)। एक प्रकार का "दिन के समय" का प्रतिनिधित्व होना चाहिए - जो निश्चित रूप से है, बिल्कुल वही जो मैंने नोदा समय में लागू किया है। जब भी आप बहुत सी विभिन्न प्रकार की अवधारणाओं को कम संख्या में टाइप करने की कोशिश करते हैं, तो आप इस तरह की समस्याओं को प्राप्त करने के लिए बाध्य होते हैं।
— जॉन स्कीट

1
यह उत्तर बहुत अच्छा है क्योंकि यह बताता है कि टाइमस्पैन इस तरीके से व्यवहार करता है, बजाय इसके कि समस्या को कैसे ठीक किया जाए। वास्तव में वहाँ तीन प्रकार होना चाहिए: DateTime, TimeOfDayऔर Date।
— Thelem

03:00 AMएक "समय में बिंदु" नहीं है। यह "एक दिन में एक बिंदु" है।
— एलेक्स

10

यहाँ मौजूदा जवाबों से कुछ गुल्लक निकालना:

public static string ToShortTimeSafe(this TimeSpan timeSpan)
{
    return new DateTime().Add(timeSpan).ToShortTimeString();
} 

public static string ToShortTimeSafe(this TimeSpan? timeSpan)
{
    return timeSpan == null ? string.Empty : timeSpan.Value.ToShortTimeSafe();
}

3
यह सबसे पवित्र उत्तर है
— toddmo

9

आपको DateTimeअपने से एक वस्तु प्राप्त करने की आवश्यकता होगीTimeSpan और फिर आप इसे आसानी से प्रारूपित कर सकते हैं।

एक संभव समाधान शून्य समय मान के साथ किसी भी तारीख में टाइमपैन को जोड़ रहा है।

var timespan = new TimeSpan(3, 0, 0);
var output = new DateTime().Add(timespan).ToString("hh:mm tt");

आउटपुट वैल्यू "03:00 AM"(अंग्रेजी लोकेल के लिए) होगी।


6

आप एएम / पीएम को नहीं जोड़ सकते TimeSpan। यदि आप 12 घंटे के घड़ी प्रारूप में समय प्रदर्शित करना चाहते हैं, तो आपको वैसे भी TimaSpanमूल्य को संबद्ध DateTimeकरना होगा।

TimeSpan12-घंटे के घड़ी प्रारूप के साथ उपयोग करने का इरादा नहीं है, क्योंकि हम एक समय अंतराल के बारे में बात कर रहे हैं यहां हैं।

जैसा कि दस्तावेज में कहा गया है ;

एक TimeSpanवस्तु एक समय अंतराल (समय की अवधि या बीता हुआ समय) का प्रतिनिधित्व करती है , जिसे किसी दूसरे दिन के सकारात्मक, नकारात्मक संख्या के रूप में मापा जाता है । TimeSpanसंरचना भी दिन के समय का प्रतिनिधित्व करने के लिए इस्तेमाल किया जा सकता है, लेकिन समय एक विशेष तिथि से संबंधित नहीं है केवल यदि। अन्यथा, DateTimeया DateTimeOffsetइसके बजाय संरचना का उपयोग किया जाना चाहिए।

इसके अलावा माइक्रोसॉफ्ट डॉक्स इस प्रकार वर्णन करता है;

एक TimeSpanमान के रूप में प्रतिनिधित्व किया जा सकता है [-]d.hh:mm:ss.ff, जहां वैकल्पिक ऋण चिह्न एक नकारात्मक समय अंतराल को इंगित करता है, dघटक दिन है, 24 घंटे की घड़ीhh पर मापा जाता है , मिनट है, सेकंड है, और एक दूसरे का अंश है।mmssff

तो इस मामले में, आप निम्नानुसार एएम / पीएम का उपयोग करके प्रदर्शित कर सकते हैं।

TimeSpan storedTime = new TimeSpan(03,00,00);
string displayValue = new DateTime().Add(storedTime).ToString("hh:mm tt");


साइड नोट :
यह भी ध्यान दें कि टाइमऑफडे की संपत्ति DateTimeएक है TimeSpan, जहां यह प्रतिनिधित्व करता है

एक समय अंतराल जो उस दिन के अंश का प्रतिनिधित्व करता है जो आधी रात के बाद से समाप्त हो गया है।


3

दिनांक समय के लिए पार्सपैन और फिर प्रारूप ("hh: mm: tt") का उपयोग करें। उदाहरण के लिए।

TimeSpan ts = new TimeSpan(16, 00, 00);
DateTime dtTemp = DateTime.ParseExact(ts.ToString(), "HH:mm:ss", CultureInfo.InvariantCulture);
string str = dtTemp.ToString("hh:mm tt");

str होगा:

str = "04:00 PM"

2

आप यह कोशिश कर सकते हैं:

   string timeexample= string.Format("{0:hh:mm:ss tt}", DateTime.Now);

आप अपनी आवश्यकता के अनुसार hh या mm या ss या tt निकाल सकते हैं, जहां hh को 12 घंटा फॉर्मेट में घंटा है, mm मिनट है, ss सेकंड है, और tt AM / PM है।


1
Parse timespan to DateTime. For Example.    
//The time will be "8.30 AM" or "10.00 PM" or any time like this format.
    public TimeSpan GetTimeSpanValue(string displayValue) 
        {   
            DateTime dateTime = DateTime.Now;
                if (displayValue.StartsWith("10") || displayValue.StartsWith("11") || displayValue.StartsWith("12"))
                          dateTime = DateTime.ParseExact(displayValue, "hh:mm tt", CultureInfo.InvariantCulture);
                    else
                          dateTime = DateTime.ParseExact(displayValue, "h:mm tt", CultureInfo.InvariantCulture);
                    return dateTime.TimeOfDay;
                }

0

सबसे पहले, आपको समय अवधि को डेटाइम संरचना में बदलने की आवश्यकता है:

var dt = new DateTime(2000, 12, 1, timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds)

फिर आपको शॉर्ट टाइम फॉर्मेट के साथ वैल्यू को स्ट्रिंग में बदलने की आवश्यकता है

var result = dt.ToString("t"); // Convert to string using Short Time format
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.