Bagaimana anda mengkonversi string seperti 2009-05-08 14:40:52,531
menjadi DateTime
?
Karena anda adalah penanganan 24 jam berdasarkan waktu dan anda memiliki koma memisahkan detik fraksi, saya merekomendasikan bahwa anda menetapkan custom format:
DateTime myDate = DateTime.ParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff",
System.Globalization.CultureInfo.InvariantCulture);
Anda pada dasarnya memiliki dua pilihan untuk ini. DateTime.Parse()
dan DateTime.ParseExact()
.
Yang pertama adalah sangat pemaaf dalam hal sintaks dan akan mengurai tanggal dalam format yang berbeda. Hal ini baik untuk input pengguna yang mungkin datang dalam format yang berbeda.
ParseExact akan memungkinkan anda untuk menentukan format yang tepat dari tanggal string digunakan untuk parsing. Hal ini baik untuk digunakan jika anda string selalu dalam format yang sama. Dengan cara ini, anda dapat dengan mudah mendeteksi adanya penyimpangan dari data yang diharapkan.
Anda dapat parse user input seperti ini:
DateTime enteredDate = DateTime.Parse(enteredString);
Jika anda memiliki format tertentu untuk string, anda harus menggunakan metode lain:
DateTime loadedDate = DateTime.ParseExact(loadedString, "d", null);
"d"
singkatan dari pendek tanggal pola (lihat MSDN untuk info lebih lengkap) dan null
menetapkan bahwa saat ini budaya harus digunakan untuk parsing string.
menggunakan DateTime.Mengurai(string)
DateTime dateTime= DateTime.Parse(dateTimeStr);
Tak seorang pun tampaknya untuk menerapkan metode penyuluhan. Dengan bantuan @CMS's jawaban:
Kerja dan peningkatan sumber lengkap contoh berikut: Inti Link
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)));
}
}
}
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);
Anda juga bisa menggunakan DateTime.TryParseExact() seperti di bawah ini jika anda tidak yakin dari nilai input.
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
}
DateTime.Mengurai
Sintaks:
DateTime.Parse(String value)
DateTime.Parse(String value, IFormatProvider provider)
DateTime.Parse(String value, IFormatProvider provider, DateTypeStyles styles)
Contoh:
string value = "1 January 2019";
CultureInfo provider = new CultureInfo("en-GB");
DateTime.Parse(value, provider, DateTimeStyles.NoCurrentDateDefault););
It's juga perlu diingat DateTime adalah sebuah benda yang disimpan sebagai nomor secara internal dalam kerangka kerja, Format ini hanya berlaku untuk itu ketika anda mengubahnya kembali ke string.
Parsing mengkonversi string ke internal jenis nomor.
Format konversi internal nilai numerik untuk dibaca string.
Baru-baru ini saya mengalami masalah di mana saya mencoba untuk mengkonversi DateTime untuk lolos ke Linq apa yang saya tidak't menyadari pada saat itu adalah format yang tidak relevan ketika melewati DateTime untuk Linq Query.
DateTime SearchDate = DateTime.Parse(searchDate);
applicationsUsages = applicationsUsages.Where(x => DbFunctions.TruncateTime(x.dateApplicationSelected) == SearchDate.Date);
Masukan kode ini di kelas statis> public static class Namakelas{ }
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();
}
}
Dengan cara ini, anda dapat menggunakan
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('-', ':', '-');
Budaya yang berbeda di dunia menulis string tanggal dalam cara yang berbeda. Misalnya, di AS 01/20/2008 adalah 20 januari 2008. Di Perancis ini akan membuang InvalidFormatException. Hal ini karena Perancis membaca tanggal-kali di malam Hari/Bulan/Tahun, dan di AS itu adalah Bulan/Hari/Tahun.
Akibatnya, string seperti 20/01/2008 akan mengurai januari 20, 2008 di Perancis, dan kemudian melemparkan sebuah InvalidFormatException di AS.
Untuk menentukan arus budaya pengaturan, anda dapat menggunakan Sistem.Globalisasi.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);