Saya mencoba mengonversi nilai diformat string saya ke tipe tanggal dengan format dd/MM/yyyy
.
this.Text="22/11/2009";
DateTime date = DateTime.Parse(this.Text);
Apa masalahnya ? Ini memiliki penggantian kedua yang meminta IFormatProvider
. Apa ini? Apakah saya perlu melewati ini juga? Jika Ya bagaimana menggunakannya untuk kasus ini?
Edit
Apa perbedaan antara Parse
dan ParseExact
?
Edit 2
Baik jawaban Slaks dan Sam berfungsi untuk saya, saat ini pengguna memberikan input tetapi ini akan meyakinkan saya bahwa mereka valid dengan menggunakan maskTextbox.
Jawaban mana yang lebih baik mengingat semua aspek seperti tipe keselamatan, kinerja atau sesuatu yang Anda sukai
Jawaban:
Gunakan
DateTime.ParseExact
.sumber
dd/MM/yyyy
sedemikian sehingga string teks dengan waktu di dalamnya tidak akan diuraikan dengan benar. Anda harus menghapus waktu atau memasukkannya ke dalam pola format. Ada kelebihanParseExact
yang menerima array pola format dan akan mem-parsing teks jika cocok dengan salah satu dari mereka.CultureInfo.InvariantCulture
yang saat ini jika Anda mendefinisikan suatu format?Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
, itu akan menghancurkan solusi Anda. Untuk memperbaikinya, gunakan"dd'/'MM'/'yyyy"
(melindungi garis miring dengan tanda kutip tunggal), atau@"dd\/MM\/yyyy"
("melarikan diri" garis miring dengan garis miring terbalik).Anda perlu menelepon
ParseExact
, yang mem-parsing tanggal yang sama persis dengan format yang Anda berikan.Sebagai contoh:
The
IFormatProvider
parameter menentukan budaya untuk menggunakan untuk mengurai tanggal.Kecuali jika string Anda berasal dari pengguna, Anda harus lulus
CultureInfo.InvariantCulture
.Jika string memang berasal dari pengguna, Anda harus lulus
CultureInfo.CurrentCulture
, yang akan menggunakan pengaturan yang ditentukan pengguna dalam Opsi Regional di Panel Kontrol.sumber
using System.Globalization;
Mem-parsing representasi string dari DateTime adalah hal yang rumit karena budaya yang berbeda memiliki format tanggal yang berbeda. .Net mengetahui format tanggal ini dan menariknya dari budaya Anda saat ini (
System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat
) saat Anda meneleponDateTime.Parse(this.Text)
;Misalnya, string "22/11/2009" tidak cocok dengan ShortDatePattern untuk Amerika Serikat (en-AS) tetapi cocok dengan Prancis (fr-FR).
Sekarang, Anda bisa memanggil
DateTime.ParseExact
dan meneruskan string format persis yang Anda harapkan, atau Anda bisa meneruskan budaya yang sesuaiDateTime.Parse
untuk menguraikan tanggal.Misalnya, ini akan menguraikan tanggal Anda dengan benar:
Tentu saja, Anda tidak hanya harus memilih Prancis secara acak, tetapi sesuatu yang sesuai dengan kebutuhan Anda.
Yang perlu Anda ketahui adalah apa
System.Threading.Thread.CurrentThread.CurrentCulture
yang ditetapkan, dan jika / mengapa itu berbeda dari yang Anda harapkan.sumber
Meskipun solusi di atas efektif, Anda juga dapat memodifikasi file konfigurasi web dengan ...
Ref: Format datetime berbeda pada mesin lokal dibandingkan dengan mesin produksi
sumber
Anda mungkin perlu menentukan budaya untuk format tanggal tertentu seperti di:
Untuk lebih jelasnya buka di sini:
http://msdn.microsoft.com/en-us/library/5hh873ya.aspx
sumber
Setelah menghabiskan banyak waktu saya menyelesaikan masalah
sumber
gunakan ini untuk mengonversi string ke datetime:
sumber
Berdasarkan referensi ini , pendekatan selanjutnya bekerja untuk saya:
sumber
sumber
Sama seperti seseorang di atas mengatakan Anda dapat mengirimnya sebagai parameter string tetapi harus memiliki format ini: '20130121' misalnya dan Anda dapat mengonversinya ke format itu dengan mengambilnya langsung dari kontrol. Jadi Anda akan mendapatkannya misalnya dari kotak teks seperti:
untuk mengubahnya menjadi: '20130121' yang Anda gunakan:
sehingga SQL dapat mengonversinya dan memasukkannya ke dalam basis data Anda.
sumber
Anda juga bisa menggunakannya
sumber
Bekerja untuk saya di bawah kode:
Namespace
sumber
Ubah Secara Manual:
Mulai 11/22/2015 akan dikonversi pada 22/11/2015
sumber