Jawaban:
Karena Anda menangani waktu berbasis 24 jam dan Anda memiliki koma yang memisahkan fraksi detik, saya sarankan Anda menentukan format khusus:
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 opsi untuk ini. DateTime.Parse()
dan DateTime.ParseExact()
.
Yang pertama sangat memaafkan dalam hal sintaks dan akan mengurai tanggal dalam berbagai format. Ini bagus untuk input pengguna yang mungkin datang dalam format yang berbeda.
ParseExact akan memungkinkan Anda untuk menentukan format yang tepat dari string tanggal Anda untuk digunakan untuk penguraian. Baik untuk menggunakan ini jika string Anda selalu dalam format yang sama. Dengan cara ini, Anda dapat dengan mudah mendeteksi penyimpangan dari data yang diharapkan.
Anda dapat mengurai input pengguna seperti ini:
DateTime enteredDate = DateTime.Parse(enteredString);
Jika Anda memiliki format spesifik untuk string, Anda harus menggunakan metode lain:
DateTime loadedDate = DateTime.ParseExact(loadedString, "d", null);
"d"
singkatan dari pola tanggal pendek (lihat MSDN untuk info lebih lanjut ) dan null
menentukan bahwa budaya saat ini harus digunakan untuk mengurai string.
Gunakan DateTime.Parse(string)
:
DateTime dateTime = DateTime.Parse(dateTimeStr);
Sepertinya tidak ada yang menerapkan metode ekstensi. Dengan bantuan jawaban @ CMS :
Contoh sumber lengkap yang berfungsi dan lebih baik ada di sini: Gist 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)));
}
}
}
Nobody seems to implemented an extension method
mungkin karena tidak diperlukan ...
Saya mencoba berbagai cara. Apa yang berhasil bagi saya adalah ini:
Convert.ToDateTime(data, CultureInfo.InvariantCulture);
data
bagi saya adalah saat-saat seperti ini 9/24/2017 9:31:34 AM
Coba di bawah ini, di mana strDate adalah tanggal Anda dalam format 'MM / hh / tttt'
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
Sintaksis:
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););
Perlu juga diingat DateTime adalah objek yang disimpan sebagai angka di dalam kerangka kerja, Format hanya berlaku ketika Anda mengubahnya kembali menjadi string.
Parsing mengkonversi string ke tipe angka internal.
Memformat mengubah nilai numerik internal menjadi string yang dapat dibaca.
Saya baru-baru ini memiliki masalah di mana saya mencoba untuk mengubah DateTime untuk lulus ke Linq apa yang saya tidak sadari pada waktu itu format tidak relevan ketika melewati DateTime ke Linq Query.
DateTime SearchDate = DateTime.Parse(searchDate);
applicationsUsages = applicationsUsages.Where(x => DbFunctions.TruncateTime(x.dateApplicationSelected) == SearchDate.Date);
Anda juga bisa menggunakan DateTime.TryParseExact () seperti di bawah ini jika Anda tidak yakin dengan 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
}
Letakkan kode ini di kelas statis> 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();
}
}
Dengan cara ini, Anda bisa menggunakannya
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('-', ':', '-');
Saya baru saja menemukan cara yang elegan:
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"
Budaya yang berbeda di dunia menulis string tanggal dengan cara yang berbeda. Misalnya, di AS 01/20/2008 adalah 20 Januari 2008. Di Prancis ini akan melempar InvalidFormatException. Ini karena Prancis membaca tanggal-waktu sebagai Hari / Bulan / Tahun, dan di AS adalah Bulan / Hari / Tahun.
Akibatnya, string seperti 20/01/2008 akan diurai hingga 20 Januari 2008 di Prancis, lalu melempar InvalidFormatException di AS.
Untuk menentukan pengaturan budaya Anda saat ini, Anda dapat menggunakan 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);
ini memberi Anda
2019-08-17 11:14:49.000
Apakah Anda ingin cepat?
Katakanlah Anda memiliki tanggal dengan format yyMMdd.
Cara tercepat untuk mengubahnya yang saya temukan adalah:
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')
Cukup, pilih indeks sesuai dengan format tanggal pilihan Anda. Jika Anda membutuhkan kecepatan mungkin Anda tidak keberatan dengan cara fungsi 'non-generik'.
Metode ini membutuhkan sekitar 10% dari waktu yang dibutuhkan oleh:
var d = DateTime.ParseExact(s, "yyMMdd", System.Globalization.CultureInfo.InvariantCulture);
@CMS
tidak ditandai sebagai jawaban? Mungkin ada alasan -Aku penasaran.