แก้ไขปัญหา JsonConvert แล้ว TimeZone เพี้ยน
เมื่อเราใช้คำสั่ง JsonConvert.DeserializeObject
เพื่อจะ Convert Json String แล้ว Convert ไปเป็น Object
มีเรื่อง TimeZone เข้ามาเกี่ยวข้อง
อย่างเคสที่ผมเจอคือเลือกเวลาในหน้าเว็บเป็นวันที่ 18
แต่พอ Convert กลับมา ในโปรแกรมนั้นได้เป็นวันที่ 19
เพื่อดูจากข้อมูลก็พอบว่า สิ่งที่ผิดปกติคือ เวลามันถูกบวกไป 7 ชั่วโมง
(ซึ่งตอนนั้นเวลาในเครื่องผม เป็น 19:46)
นั้นแสดงว่า
หน้าเว็บเราส่งเวลามาเป็น UTC+7 แล้ว
แต่โปรแกรมเรา เอามา +7 ไปอีกรอบนึง
ทำให้มันข้ามไปเป็นวันถัดไป
วิธีแก้ก็คือ
เราจะกำหนด Setting ในการ Convert
โดยบอกว่า ค่าที่รับเข้ามา เป็น UTC +7 อยู่แล้ว ไม่ต้องทำการบวกเพิ่ม
โดยมีการเขียนโค้ต 2 วิธีคือ
1. กำหนด Setting เข้าไปใน Method นั้นเลยทุกครั้งที่มีการ Convert
2. กำหนดเป็น DefaultSetting ที่ Global.asaxวิธีแก้ก็คือ
เพียงเท่านี้ ตัวโปรแกรมเราก็จะมองว่า Time ที่ส่งเขามานั้นเป็น UTC แล้ว และไม่ต้องทำการ Convert เพิ่ม
Ref : https://www.newtonsoft.com/json/help/html/DefaultSettings.htm





ความคิดเห็น
แสดงความคิดเห็น