ทำไม DateTime.ToString (“ dd / MM / yyyy”) ให้ฉัน dd-MM-yyyy


155

ฉันต้องการให้ datetime ของฉันถูกแปลงเป็นสตริงที่อยู่ในรูปแบบ "dd / MM / yyyy"

เมื่อใดก็ตามที่ฉันแปลงมันโดยใช้DateTime.ToString("dd/MM/yyyy")ฉันได้รับdd-MM-yyyyแทน

มีข้อมูลวัฒนธรรมบางอย่างที่ฉันต้องตั้งค่าหรือไม่?


ทำ DateTime.ToString ("dd / MM / yyyy");
jimplode

2
ฉันทำอย่างนั้นมันใช้งานไม่ได้ปัญหาไม่ใช่วันที่มันคือ "-" ฉันต้องการให้เป็น "/" อย่างที่ฉันระบุ
Diskdrive

7
ใช้ MM แทน mm - mm แทนนาทีและไม่ใช่เดือน
Lloyd Powell


MSDN เอกสารสำหรับ DateTime.ToStringเป็นความผิดอย่างไร้ความหวัง " ตัวอย่างเช่น ‘dd / mm / yyyyHH: mm’ รูปแบบสตริงแสดงวันที่และเวลาสตริงในรูปแบบคงที่ ... รายงานการใช้รูปแบบของสตริง ‘/’ เป็นคงที่ ตัวคั่นวันที่โดยไม่คำนึงถึงการตั้งค่าเฉพาะวัฒนธรรม "
พันเอก Panic

คำตอบ:


243

Slash เป็นตัวคั่นวันที่ดังนั้นจะใช้ตัวคั่นวันที่วัฒนธรรมปัจจุบัน

หากคุณต้องการให้รหัสยากที่จะใช้เครื่องหมายทับคุณสามารถทำสิ่งนี้:

DateTime.ToString("dd'/'MM'/'yyyy")

2
@spender - ในบางวัฒนธรรมพวกเขาเป็น
Daniel A. White

ขอบคุณสำหรับคำตอบที่รวดเร็ว คุณพูดถูก ฉันจะให้คำตอบที่ถูกต้อง
Diskdrive

6
คุณสามารถใช้รูปแบบนี้: dateTime.ToString (@ "yyyy \ / MM \ / dd")
base2


2
การหลีกเลี่ยงสตริงรูปแบบโดยใช้เครื่องหมายทับขวานั้นใช้งานได้เช่น: DateTime.Now.ToString ("dd \\ / MM \\ / yyyy");
TomB

61

ผ่านCultureInfo.InvariantCultureเป็นพารามิเตอร์ตัวที่สองของ DateTime มันจะคืนค่าสตริงตามที่คุณต้องการแม้แต่ในรูปแบบที่พิเศษมาก:

DateTime.Now.ToString("dd|MM|yyyy", CultureInfo.InvariantCulture)

จะกลับมา: 28 | 02 | 2014


รหัสนี้ชัดเจนยิ่งกว่าคำตอบที่ยอมรับได้ (ฉันหมายถึงเพิ่ม CultureInfo) อย่างน้อยก็ดูดีกว่าการใช้เครื่องหมายทับ
Sergey

2
อ่านง่ายกว่าแน่นอนโดยใช้อักขระเลี่ยง ฉันตกใจเล็กน้อยที่ไม่รู้ตลอดเวลาว่ารูปแบบวันที่ของฉันจะถูกเขียนทับ!
โหด

10

เพิ่มCultureInfo.InvariantCultureเป็นอาร์กิวเมนต์:

using System.Globalization;

...

var dateTime = new DateTime(2016,8,16);
dateTime.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);

จะกลับมา:

"16/08/2016"

หากนักพัฒนาใช้วิธีการร้อยสายอักขระที่มีตัวอักษรบางตัวเช่น M m ss เป็นต้นจะได้รับผลลัพธ์ที่ผิดพลาดด้วยโซลูชันของคุณเช่น Datetime.Now.ToString ("yyyy / dd / mm / เดือน", CultureInfo.InvariantCulture) จะไม่ส่งผลให้ 2017/01 / 02 / เดือนมันจะส่งผล 2017/01/02/2 เดือน
Okan SARICA

@OkanSARICA หากคุณต้องการต่อท้ายวันที่ด้วย” / เดือน” คุณควรทำหลังจากวิธี ToString แทน DateTime.Now.ToString (” yyyy / MM / dd”, CultureInfo.InvariantCulture) +” / เดือน”;
Mikael Engver


-3

อาจเป็นใบ้ / คำตอบ แต่คุณเคยลองdd/MM/yyyyบ้างไหม? บันทึกตัวพิมพ์ใหญ่

mmเป็นนาทีซึ่งมีศูนย์นำหน้า ดังนั้นฉันสงสัยว่านั่นคือสิ่งที่คุณต้องการ

สิ่งนี้อาจมีประโยชน์: http://www.geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.