मैं डेटाइम से एएम / पीएम मूल्य कैसे प्राप्त करूं?


204

प्रश्न में कोड नीचे है:

public static string ChangePersianDate(DateTime dateTime)
{
    System.Globalization.GregorianCalendar PC = new System.Globalization.GregorianCalendar();
    PC.CalendarType = System.Globalization.GregorianCalendarTypes.USEnglish;
    return
    PC.GetYear(dateTime).ToString()
    + "/"
    + PC.GetMonth(dateTime).ToString()
    + "/"
    + PC.GetDayOfMonth(dateTime).ToString()
    + ""
    + PC.GetHour(dateTime).ToString()
    + ":"
    + PC.GetMinute(dateTime).ToString()
    + ":"
    + PC.GetSecond(dateTime).ToString()
    + " "
    ????????????????
}

मैं dateTimeमूल्य से एएम / पीएम कैसे प्राप्त कर सकता हूं ?


24
इससे बेहतर प्रारूप बनाने के लिए कहीं बेहतर तरीके हैं DateTime। देखें msdn.microsoft.com/en-us/library/8kb3ddd4.aspx
ChrisF

बस का उपयोग करेंdateTime.ToString("tt");
डेविड यीशु

जवाबों:


368

कैसा रहेगा:

dateTime.ToString("tt", CultureInfo.InvariantCulture);

3
यह अधिकार प्राप्त करने के लिए आपको नया System.Globalization.CultureInfo ("en-US") जोड़ने की आवश्यकता है (यदि आप पहले से ही यूएस संदर्भ में थ्रेड नहीं चला रहे हैं)
thomas

1
@thomas - अच्छी बात है। अब निर्दिष्ट करने के लिए संपादितCultureInfo.InvariantCulture
एंडी

8
ToString("tt", System.Globalization.CultureInfo.InvariantCulture)
IndieTech समाधान

यह तारीख से AM / PM पाने के लिए है। लेकिन अगर मैं किसी भी तारीख में एएम को पीएम में बदलना चाहता हूं। तो मुझे क्या करना चाहिए ?
अजय शर्मा

2
@ अजयशर्मा प्रारूप मूल्यांकन से 12 घंटे पहले बस जोड़ दें। DateTime.Now.AddHours(12).ToString("tt", CultureInfo.InvariantCulture)
AXMIM

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

यह आपको समय का स्ट्रिंग मान देना चाहिए। tt को am / pm को जोड़ना चाहिए।

आप संबंधित विषय को भी देख सकते हैं:

आपको दिन का वर्तमान समय कैसे मिलता है?


8
यह कम मामला होना चाहिए hhक्योंकि आपका वर्तमान प्रतिनिधित्व आउटपुट में समय और समय के साथ 210 समय है जो थोड़ा व्यर्थ है
प्यार नहीं किया।

1
@LukeMcGregor मैंने आपके सुझाव के अनुसार उत्तर में संशोधन किया है।
डॉक्टर जोन्स

46

DateTimeहमेशा "अमेरिकन" (ग्रेगोरियन) कैलेंडर में आंतरिक रूप से किया जाना चाहिए। इसलिए यदि आप

var str = dateTime.ToString(@"yyyy/MM/dd hh:mm:ss tt", new CultureInfo("en-US"));

आपको वह मिलना चाहिए जो आप कई कम लाइनों में चाहते हैं।


33

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

पर .ToSTring("") :

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

  • यदि आप "HH" का उपयोग करते हैं - >> घंटे, 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          ar-SA       Arabic
ar-BH       ar-BH       Arabic (Bahrain)
ar-DZ       ar-DZ       Arabic (Algeria)
ar-EG       ar-EG       Arabic (Egypt)

big list...

मुझे पता है अगर आप एक और सवाल है।


अगर मुझे "11:12 PM" देखना है? मुझे लगता है कि आपका जवाब अधूरा है।
फजोड्र

18

मुझे पता है कि यह बहुत देर से लग सकता है .. हालाँकि इससे किसी को बाहर निकलने में मदद मिल सकती है

मैं एएम पीएम को तारीख का हिस्सा दिलाना चाहता था, इसलिए मैंने एंडी को सलाह दी:

dateTime.ToString("tt");

मैंने अपनी फ़ाइलों को सहेजने के लिए एक पथ का निर्माण करने के लिए उस हिस्से का उपयोग किया .. मैंने अपनी धारणाएं बनाईं कि मुझे एएम या पीएम मिलेगा और कुछ नहीं !!

हालाँकि जब मैंने एक पीसी का उपयोग किया था कि इसकी संस्कृति अंग्रेजी नहीं है .. (मेरे मामले में ARABIC) .. मेरा आवेदन विफल हो गया प्रारूप "tt" कुछ नया नहीं दिया है AM या PM (م या ص) नहीं।

तो इसके पीछे का तर्क संस्कृति को अनदेखा करने के लिए दूसरा तर्क जोड़कर था:

dateTime.ToString("tt", CultureInfo.InvariantCulture);

.. बेशक यू को जोड़ना है: System.Globalization का उपयोग करना; उर फ़ाइल के शीर्ष पर मुझे आशा है कि किसी की मदद करेंगे :)


3
इसे जोड़ने के लिए धन्यवाद क्योंकि इसने आज मेरी मदद की - मुझे अपने देव परिवेश पर AM और दूरस्थ सर्वर पर AM मिल रहा था और जब तक मैंने इस पोस्ट को नहीं पढ़ा तब तक इसके साथ Google की बहुत बड़ी मदद नहीं हुई थी। यहां तक ​​कि डॉटनेटपियर कहते हैं, "टीटी के आउटपुट में कोई अवधि नहीं होती है। यदि आपको अपने एएम या पीएम में अवधि की आवश्यकता होती है, तो आपको स्ट्रिंग में हेरफेर करना होगा।" बेशक मेरे मामले में पूरी तरह से असत्य था ...
कीवीसुगोड्डेस

13

यह बहुत आसान है

  Date someDate = new DateTime();
  string timeOfDay = someDate.ToString("hh:mm tt"); 
  // hh - shows hour and mm - shows minute - tt - shows AM or PM

10
+ PC.GetHour(datetime) > 11 ? "pm" : "am"

आपके उदाहरण के लिए लेकिन डेटाइम को फॉर्मेट करने के बेहतर तरीके हैं।


लिंक देखें जो @ChrisF ने ऊपर दिया है। मूल रूप से आप डेटाइम ऑब्जेक्ट पर ToString विधि का उपयोग कर सकते हैं और इसे एक प्रारूप पास कर सकते हैं। इस तरह आप डेटाइम को कॉल नहीं करते हैं। आप अपने कोड उदाहरण में कर रहे हैं।
केविन होल्डिच ने

2
जैसा कि बदसूरत यह लग सकता है, यह विभिन्न संस्कृतियों के साथ खिलवाड़ करने की तुलना में कहीं अधिक सरल और अधिक सुसंगत तरीका है। उदाहरण के लिए, कई संस्कृतियों में 24 घंटे का समय दिखाई देता है और इसमें AM / PM बिल्कुल शामिल नहीं होते हैं, और ToString ("tt") एक खाली स्ट्रिंग का उत्पादन करता है।
nathanchere


4

कुछ इस तरह bool isPM = GetHour() > 11। लेकिन अगर आप तार को डेट करना चाहते हैं, तो आपको ऐसा करने की जरूरत नहीं है। उसके लिए दिनांक स्वरूपण कार्यों का उपयोग करें ।


1
ईमानदारी से, मैं भी isPM () विधि नहीं दिखाऊंगा। केवल वैध तरीके से प्रारूप दिनांक समय वस्तुओं के लिए जिस तरह से formatters उपयोग कर रहा है।
रिचब 01

@ richb01 मैं असहमत हूं। एकमात्र सुरक्षित तरीका यह है कि मैं am / pm का उपयोग बिल्कुल न करूं और 24 h प्रारूप का उपयोग करूं, हमेशा अपरिवर्तनीय संस्कृति को बढ़ाता हूं या इसे मैन्युअल रूप से करता हूं। "am" और "pm" जैसे जर्मन भाषा में भरे हुए नहीं हैं, यह सिर्फ खाली है। अगर कोई String.Format ("{0: hh: mm tt}", DateTime.Now) लिखता है, तो उन्हें बस गलत समय मिलता है
क्रिस्टोफ़

1

आप इसे इस तरह से परख सकते हैं

Console.WriteLine(DateTime.Now.ToString("tt "));

आउटपुट इस तरह होगा:

AM

या

PM

1
क्या आप जानते हैं कि आप स्वीकृत उत्तर के कोड का उपयोग कर रहे हैं?
थॉमस अय्यूब

प्रिय @ThomasAyoub, जो कोड लिखा गया है वह मेरे प्रोजेक्ट स्रोत की एक पंक्ति से है। यह अभी काम कर रहा है।
यजरलो

क्षमा करें, यह एक बहुत ही खराब उत्तर है, विशेषकर क्योंकि परिचयNow
वुल्फ

0

यहां एक आसान तरीका है जिससे आप समय प्रारूप लिख सकते हैं (hh:mm:ss tt)और यदि आप चाहें तो उन्हें अलग से प्रदर्शित कर सकते हैं।

string time = DateTime.Now.Hour.ToString("00") + ":" + DateTime.Now.Minute.ToString("00") + ":" + DateTime.Now.Second.ToString("00") + DateTime.Now.ToString(" tt");

या बस:

 DateTime.Now.ToString("hh:mm:ss tt")

0

@ एंडी का जवाब ठीक है। लेकिन अगर आप 24 घंटे के प्रारूप के बिना समय दिखाना चाहते हैं तो आप इस तरह से अनुसरण कर सकते हैं

string dateTime = DateTime.Now.ToString("hh:mm:ss tt", CultureInfo.InvariantCulture);

उसके बाद, आपको "10:35:20 PM" या "10:35:20 AM" जैसा समय मिलना चाहिए



-2

यहाँ कुछ उदाहरण कोड है:

DateTime time = DateTime.Now;
string AM_PM;
AM_PM = time.ToLongTimeString().Substring(time.ToLongTimeString().Length - 2);

2
यह एक विश्वसनीय समाधान नहीं है। ToLongTimeString()वर्तमान थ्रेड संस्कृति के आधार पर एक मान देता है। और अन्य उत्तर में दिए गए समान समाधान के विपरीत, इस कोड होगा, भले ही आप के लिए धागा संस्कृति सेट काम नहीं InvariantCultureहै, क्योंकि अपरिवर्तनीय संस्कृति के LongTimePattern-which क्या की वापसी मूल्य का निर्धारण करता है ToLongTimeString()-is HH:mm:ss
जो फैरेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.