Skip to content

4.4 Locale and Parsing Failures

03/04/2026 — ถ้าคุณอ่านนี้ คุณคิดว่ามันคือวันที่เท่าไหร่? คำตอบขึ้นอยู่กับว่าคุณอยู่ที่ไหนบนโลก

ปัญหา: วันที่เดียวกัน อ่านต่างกัน

Section titled “ปัญหา: วันที่เดียวกัน อ่านต่างกัน”
Formatประเทศ03/04/2026 หมายถึง
MM/DD/YYYYสหรัฐฯMarch 4, 2026
DD/MM/YYYYไทย, ยุโรป, UK3 April, 2026

วันที่ต่างกัน 1 เดือน — จาก text เดียวกัน!

ปัญหานี้ไม่ใช่แค่ทฤษฎี: ถ้าคุณ import CSV ที่ผสมระหว่าง US format กับ Thai/EU format → ข้อมูลวันที่จะ ผิดเงียบๆ ไม่มี error

ISO 8601 คือมาตรฐานสากลที่ ไม่มีความกำกวม:

YYYY-MM-DD
2026-04-24
  • ปีมาก่อนเสมอ
  • ใช้ขีด - คั่น
  • ไม่มีใครสับสน
  • Sort ตาม text = sort ตามวันที่ (bonus!)

กฎ: เก็บวันที่เป็น YYYY-MM-DD เสมอ — แปลง format ตอนแสดงผลเท่านั้น

ทดลองปัญหา locale:

  1. ไปที่ File → Settings → Locale
  2. เปลี่ยนเป็น “United States” → พิมพ์ 03/04/2026 → จะถูกอ่านเป็น March 4
  3. เปลี่ยนเป็น “Thailand” → พิมพ์ 03/04/2026 → จะถูกอ่านเป็น 3 April

วิธีแก้ใน Sheets:

=DATEVALUE("2026-04-24") → ISO 8601 ชัดเจนเสมอ
=DATE(2026, 4, 24) → ระบุ ปี, เดือน, วัน แยกกัน (ปลอดภัยที่สุด)
=TEXT(A1, "YYYY-MM-DD") → แปลงวันที่เป็น ISO format

เช็คว่า Sheets ตีความถูก:

=MONTH(A1) → ถ้าได้ 4 = April, ถ้าได้ 3 = March

Checklist: ป้องกันปัญหา Locale

Section titled “Checklist: ป้องกันปัญหา Locale”
  1. เก็บวันที่เป็น YYYY-MM-DD (ISO 8601) เสมอ — ไม่ว่าจะใน CSV, database, หรือ API
  2. ถ้า input มาจากคน → ถามหรือบังคับ format (เช่น date picker แทน text input)
  3. ถ้า input มาจาก CSV → ดูตัวอย่างก่อน: มีวันที่ > 12 ไหม (เช่น 25/03 → แน่ใจว่า DD/MM)
  4. ใน pandas → ใช้ format= parameter ระบุ format ชัดเจน แทนที่จะให้ pandas เดา
  5. ใน SQL → ใช้ TO_DATE(text, format) แทนที่จะ cast ตรงๆ