เป็นเพราะรูปแบบวัฒนธรรมบางอย่างหรือไม่?
ใช่. ผู้ใช้ของคุณต้องอยู่ในวัฒนธรรมที่ตัวคั่นเวลาเป็นจุด ทั้งสอง ":" และ "/" จะถูกตีความในทางวัฒนธรรมที่มีความอ่อนไหวในวันที่กำหนดเองและรูปแบบเวลา
ฉันจะแน่ใจได้อย่างไรว่าสตริงผลลัพธ์ถูกคั่นด้วยเครื่องหมายจุดคู่แทนจุด
ฉันขอแนะนำให้ระบุCultureInfo.InvariantCulture
:
string text = dateTime.ToString("MM/dd/yyyy HH:mm:ss.fff",
CultureInfo.InvariantCulture);
หรือคุณสามารถอ้างอิงตัวคั่นเวลาและวันที่:
string text = dateTime.ToString("MM'/'dd'/'yyyy HH':'mm':'ss.fff");
... แต่นั่นจะให้ผลลัพธ์ที่ "น่าสนใจ" ที่คุณอาจไม่คาดคิดหากคุณให้ผู้ใช้ทำงานในวัฒนธรรมที่ระบบปฏิทินเริ่มต้นไม่ใช่ปฏิทินเกรกอเรียน ตัวอย่างเช่นใช้รหัสต่อไปนี้:
using System;
using System.Globalization;
using System.Threading;
class Test
{
static void Main()
{
DateTime now = DateTime.Now;
CultureInfo culture = new CultureInfo("ar-SA");
Thread.CurrentThread.CurrentCulture = culture;
Console.WriteLine(now.ToString("yyyy-MM-ddTHH:mm:ss.fff"));
}
}
ที่สร้างผลลัพธ์ (ในวันที่ 18 กันยายน 2013) ของ:
11/12/1434 15:04:31.750
ฉันเดาว่าบริการเว็บของคุณจะต้องประหลาดใจแน่ ๆ !
ฉันขอแนะนำไม่เพียง แต่ใช้วัฒนธรรมที่ไม่แปรเปลี่ยนเท่านั้น แต่ยังเปลี่ยนเป็นรูปแบบวันที่ ISO-8601 ด้วย:
string text = dateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
นี่เป็นรูปแบบที่ยอมรับกันทั่วโลกมากขึ้นนอกจากนี้ยังสามารถจัดเรียงได้และทำให้ลำดับเดือนและวันชัดเจน (ในขณะที่ 06/07/2013 สามารถตีความได้ว่าเป็นวันที่ 7 มิถุนายนหรือ 6 กรกฎาคมขึ้นอยู่กับวัฒนธรรมของผู้อ่าน)