C # DateTime เป็นเวลา UTC โดยไม่ต้องเปลี่ยนเวลา


124

ฉันจะแปลงวันที่และเวลาที่มีอยู่ก่อนหน้านี้เป็นเวลา UTC ได้อย่างไรโดยไม่ต้องเปลี่ยนเวลาจริง

ตัวอย่าง:

DateTime dateTime = GetSomeDateTime(); // dateTime here is 3pm
dateTime.ToUtcDateTime() // datetime should still be 3pm

คุณอยู่ในPST ? คุณจะได้รับความPSTคุ้มค่าอย่างไร?
Kiquenet

คำตอบ:


207
6/1/2011 4:08:40 PM Local
6/1/2011 4:08:40 PM Utc

จาก

DateTime dt = DateTime.Now;            
Console.WriteLine("{0} {1}", dt, dt.Kind);
DateTime ut = DateTime.SpecifyKind(dt, DateTimeKind.Utc);
Console.WriteLine("{0} {1}", ut, ut.Kind);

50

ใช้DateTime.SpecifyKindวิธีคงที่

สร้างออบเจ็กต์ DateTime ใหม่ที่มีจำนวนเห็บเท่ากับ DateTime ที่ระบุ แต่ถูกกำหนดให้เป็นเวลาท้องถิ่นเวลาสากลเชิงพิกัด (UTC) หรือไม่ตามที่ระบุโดยค่า DateTimeKind ที่ระบุ

ตัวอย่าง:

DateTime dateTime = DateTime.Now;
DateTime other = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc);

Console.WriteLine(dateTime + " " + dateTime.Kind); // 6/1/2011 4:14:54 PM Local
Console.WriteLine(other + " " + other.Kind);       // 6/1/2011 4:14:54 PM Utc

18

คุณสามารถใช้ตัวสร้างที่โอเวอร์โหลดของDateTime:

DateTime utcDateTime = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second, DateTimeKind.Utc);

0

คุณสามารถทำได้ด้วยวิธีนี้เช่นกัน:

DateTime utcDateTime = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second).ToUniversalTime();

อาจไม่ได้ผลตามที่คาดไว้ ลอง ... new DateTime(dateTime.Year, dateTime.Month, dateTime.dateTimeay, dateTime.Hour, dateTime.Minute, dateTime.Second).ToUniversalTime().ToString() vs DateTime.SpecifyKind(dateTime, DateTimeKind.Utc).ToString() คุณจะเห็นว่าคุณได้ผลลัพธ์ที่แตกต่างกัน
โฮเมอร์

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