जवाबों:
चूँकि आप 24-घंटे आधारित समय को संभाल रहे हैं और आपके पास सेकंड्स अंश को अलग करने वाला अल्पविराम है, मेरा सुझाव है कि आप एक कस्टम प्रारूप निर्दिष्ट करें:
DateTime myDate = DateTime.ParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff",
System.Globalization.CultureInfo.InvariantCulture);
इसके लिए आपके पास मूल रूप से दो विकल्प हैं। DateTime.Parse()
और DateTime.ParseExact()
।
पहला वाक्य रचना के संदर्भ में बहुत क्षमाशील है और कई अलग-अलग प्रारूपों में तारीखों को पार्स करेगा। यह उपयोगकर्ता इनपुट के लिए अच्छा है जो विभिन्न स्वरूपों में आ सकता है।
पार्सएक्सैक्ट आपको पार्सिंग के लिए उपयोग करने के लिए अपनी तिथि स्ट्रिंग के सटीक प्रारूप को निर्दिष्ट करने की अनुमति देगा। इसका उपयोग करना अच्छा है यदि आपकी स्ट्रिंग हमेशा एक ही प्रारूप में है। इस तरह, आप आसानी से अपेक्षित डेटा से किसी भी विचलन का पता लगा सकते हैं।
आप इस तरह उपयोगकर्ता इनपुट पार्स कर सकते हैं:
DateTime enteredDate = DateTime.Parse(enteredString);
यदि आपके पास स्ट्रिंग के लिए एक विशिष्ट प्रारूप है, तो आपको दूसरी विधि का उपयोग करना चाहिए:
DateTime loadedDate = DateTime.ParseExact(loadedString, "d", null);
"d"
शॉर्ट डेट पैटर्न के लिए खड़ा है ( अधिक जानकारी के लिए MSDN देखें ) और null
निर्दिष्ट करता है कि स्ट्रिंग को पार्स करने के लिए वर्तमान संस्कृति का उपयोग किया जाना चाहिए।
उपयोग करें DateTime.Parse(string)
:
DateTime dateTime = DateTime.Parse(dateTimeStr);
कोई भी विस्तार विधि लागू नहीं करता है। @ सीएमएस के जवाब की मदद से :
कार्य करना और बेहतर स्रोत का उदाहरण यहां दिया गया है: जिस्ट लिंक
namespace ExtensionMethods {
using System;
using System.Globalization;
public static class DateTimeExtensions {
public static DateTime ToDateTime(this string s,
string format = "ddMMyyyy", string cultureString = "tr-TR") {
try {
var r = DateTime.ParseExact(
s: s,
format: format,
provider: CultureInfo.GetCultureInfo(cultureString));
return r;
} catch (FormatException) {
throw;
} catch (CultureNotFoundException) {
throw; // Given Culture is not supported culture
}
}
public static DateTime ToDateTime(this string s,
string format, CultureInfo culture) {
try {
var r = DateTime.ParseExact(s: s, format: format,
provider: culture);
return r;
} catch (FormatException) {
throw;
} catch (CultureNotFoundException) {
throw; // Given Culture is not supported culture
}
}
}
}
namespace SO {
using ExtensionMethods;
using System;
using System.Globalization;
class Program {
static void Main(string[] args) {
var mydate = "29021996";
var date = mydate.ToDateTime(format: "ddMMyyyy"); // {29.02.1996 00:00:00}
mydate = "2016 3";
date = mydate.ToDateTime("yyyy M"); // {01.03.2016 00:00:00}
mydate = "2016 12";
date = mydate.ToDateTime("yyyy d"); // {12.01.2016 00:00:00}
mydate = "2016/31/05 13:33";
date = mydate.ToDateTime("yyyy/d/M HH:mm"); // {31.05.2016 13:33:00}
mydate = "2016/31 Ocak";
date = mydate.ToDateTime("yyyy/d MMMM"); // {31.01.2016 00:00:00}
mydate = "2016/31 January";
date = mydate.ToDateTime("yyyy/d MMMM", cultureString: "en-US");
// {31.01.2016 00:00:00}
mydate = "11/شعبان/1437";
date = mydate.ToDateTime(
culture: CultureInfo.GetCultureInfo("ar-SA"),
format: "dd/MMMM/yyyy");
// Weird :) I supposed dd/yyyy/MMMM but that did not work !?$^&*
System.Diagnostics.Debug.Assert(
date.Equals(new DateTime(year: 2016, month: 5, day: 18)));
}
}
}
Nobody seems to implemented an extension method
शायद इसलिए नहीं कि जरूरत ...
मैंने कई तरह की कोशिश की। मेरे लिए क्या काम था:
Convert.ToDateTime(data, CultureInfo.InvariantCulture);
data
मेरे लिए यह समय 9/24/2017 9:31:34 बजे जैसा था
नीचे की कोशिश करें, जहां strDate 'MM / dd / yyyy' प्रारूप में आपकी तारीख है
var date = DateTime.Parse(strDate,new CultureInfo("en-US", true))
string input;
DateTime db;
Console.WriteLine("Enter Date in this Format(YYYY-MM-DD): ");
input = Console.ReadLine();
db = Convert.ToDateTime(input);
//////// this methods convert string value to datetime
///////// in order to print date
Console.WriteLine("{0}-{1}-{2}",db.Year,db.Month,db.Day);
DateTime.Parse
वाक्य - विन्यास:
DateTime.Parse(String value)
DateTime.Parse(String value, IFormatProvider provider)
DateTime.Parse(String value, IFormatProvider provider, DateTypeStyles styles)
उदाहरण:
string value = "1 January 2019";
CultureInfo provider = new CultureInfo("en-GB");
DateTime.Parse(value, provider, DateTimeStyles.NoCurrentDateDefault););
यह भी याद रखने योग्य है कि डेटटाइम एक ऐसी वस्तु है जिसे फ्रेमवर्क में आंतरिक रूप से संख्या के रूप में संग्रहीत किया जाता है, प्रारूप केवल उस पर लागू होता है जब आप इसे वापस स्ट्रिंग में परिवर्तित करते हैं।
पार्सिंग एक स्ट्रिंग को आंतरिक संख्या प्रकार में परिवर्तित करता है।
आंतरिक संख्यात्मक मान को एक पठनीय स्ट्रिंग में परिवर्तित करना।
मेरे पास हाल ही में एक मुद्दा था, जहां मैं एक डेटाइम को लाइनक में बदलने की कोशिश कर रहा था, जो मुझे उस समय महसूस नहीं हुआ था, फॉर्मेट अप्रासंगिक था, जब डेटक को लिनक क्वेरी से पास किया गया था।
DateTime SearchDate = DateTime.Parse(searchDate);
applicationsUsages = applicationsUsages.Where(x => DbFunctions.TruncateTime(x.dateApplicationSelected) == SearchDate.Date);
यदि आप इनपुट मान के अनिश्चित हैं तो आप नीचे दिए गए DateTime.TryParseExact () का भी उपयोग कर सकते हैं।
DateTime outputDateTimeValue;
if (DateTime.TryParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out outputDateTimeValue))
{
return outputDateTimeValue;
}
else
{
// Handle the fact that parse did not succeed
}
इस कोड को स्टैटिक क्लास में रखें> public static class ClassName{ }
public static DateTime ToDateTime(this string datetime, char dateSpliter = '-', char timeSpliter = ':', char millisecondSpliter = ',')
{
try
{
datetime = datetime.Trim();
datetime = datetime.Replace(" ", " ");
string[] body = datetime.Split(' ');
string[] date = body[0].Split(dateSpliter);
int year = date[0].ToInt();
int month = date[1].ToInt();
int day = date[2].ToInt();
int hour = 0, minute = 0, second = 0, millisecond = 0;
if (body.Length == 2)
{
string[] tpart = body[1].Split(millisecondSpliter);
string[] time = tpart[0].Split(timeSpliter);
hour = time[0].ToInt();
minute = time[1].ToInt();
if (time.Length == 3) second = time[2].ToInt();
if (tpart.Length == 2) millisecond = tpart[1].ToInt();
}
return new DateTime(year, month, day, hour, minute, second, millisecond);
}
catch
{
return new DateTime();
}
}
इस तरह, आप उपयोग कर सकते हैं
string datetime = "2009-05-08 14:40:52,531";
DateTime dt0 = datetime.TToDateTime();
DateTime dt1 = "2009-05-08 14:40:52,531".ToDateTime();
DateTime dt5 = "2009-05-08".ToDateTime();
DateTime dt2 = "2009/05/08 14:40:52".ToDateTime('/');
DateTime dt3 = "2009/05/08 14.40".ToDateTime('/', '.');
DateTime dt4 = "2009-05-08 14:40-531".ToDateTime('-', ':', '-');
मुझे बस एक सुंदर तरीका मिला:
Convert.ChangeType("2020-12-31", typeof(DateTime));
Convert.ChangeType("2020/12/31", typeof(DateTime));
Convert.ChangeType("2020-01-01 16:00:30", typeof(DateTime));
Convert.ChangeType("2020/12/31 16:00:30", typeof(DateTime), System.Globalization.CultureInfo.GetCultureInfo("en-GB"));
Convert.ChangeType("11/شعبان/1437", typeof(DateTime), System.Globalization.CultureInfo.GetCultureInfo("ar-SA"));
Convert.ChangeType("2020-02-11T16:54:51.466+03:00", typeof(DateTime)); // format: "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffzzz"
दुनिया में विभिन्न संस्कृतियां अलग-अलग तरीकों से तारीख के तार लिखती हैं। उदाहरण के लिए, यूएस में 01/20/2008 जनवरी 20, 2008 है। फ्रांस में यह एक InvalidFormatException फेंक देगा। ऐसा इसलिए है क्योंकि फ्रांस तिथि / समय को दिन / महीना / वर्ष के रूप में पढ़ता है, और अमेरिका में यह महीना / दिन / वर्ष है।
नतीजतन, 20/01/2008 की तरह एक स्ट्रिंग फ्रांस में 20 जनवरी, 2008 को पार्स करेगी, और फिर अमेरिका में एक InvalidFormatException को फेंक देगी।
अपनी वर्तमान संस्कृति सेटिंग्स निर्धारित करने के लिए, आप System.Globalization.CultureInfo.CurrentCulture का उपयोग कर सकते हैं।
string dateTime = "01/08/2008 14:50:50.42";
DateTime dt = Convert.ToDateTime(dateTime);
Console.WriteLine("Year: {0}, Month: {1}, Day: {2}, Hour: {3}, Minute: {4}, Second: {5}, Millisecond: {6}",
dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, dt.Millisecond);
String now = DateTime.Now.ToString("YYYY-MM-DD HH:MI:SS");//make it datetime
DateTime.Parse(now);
यह आपको देता है
2019-08-17 11:14:49.000
क्या आप इसे जल्दी चाहते हैं?
मान लीजिए कि आपके पास प्रारूप yyMMdd के साथ एक तिथि है।
सबसे तेज़ तरीका है इसे बदलने का जो मुझे मिला वह है:
var d = new DateTime(
(s[0] - '0') * 10 + s[1] - '0' + 2000,
(s[2] - '0') * 10 + s[3] - '0',
(s[4] - '0') * 10 + s[5] - '0')
बस, अपनी पसंद के फॉर्मेट के अनुसार इंडेक्स चुनें। यदि आपको गति की आवश्यकता है, तो शायद आपको फ़ंक्शन के 'गैर-सामान्य' तरीके से कोई आपत्ति नहीं है।
इस विधि में लगभग 10% समय लगता है:
var d = DateTime.ParseExact(s, "yyMMdd", System.Globalization.CultureInfo.InvariantCulture);
@CMS
के रूप में चिह्नित नहीं की गई प्रतिक्रिया क्यों ? एक कारण हो सकता है-मैं उत्सुक हूं।