[C#] ทำไม Process มันผิดแค่เดือน 12 นะ

เรื่องของเรื่องมีอยู่ว่า มี Module ที่เป็น VB6 อันนึง convert มาเป็น .NET มา 4 ปีและ แต่ลูกค้างอแงมาเรื่อยมา ขอว่าถ้าจะแลกต้องให้โน่นนั่นนี่ และจะทดสอบให้ทั้งๆที่มันดีกว่านะ ดึงมาได้ 4 ปีแหละ จนปีนี้เอาออกเลย สรุปทีลูกค้างอแงมาตลอด ไม่ได้ Test 555 แต่มันถูกไป 90% นะ แต่จะมีอยู่เคสนึงที่ตัว Process ถ้าเป็นเดือน 12 จะมีบางเคสที่เลยมันจะผิดเสมอ เลยลองไล่ๆดู มันเพราะอะไรนะ ? VB6 บวกลูกทุ่ง .NET ย้ายมาใช้ DateTime.AddMonth() แทน Debug หาสาเหตุ เมื่อลอง Debug จริงๆ เราจะพบปัญหากันครับ VB6 ตัวแปร month ได้ 13 .NET month ได้ 1 แล้ว year ขยับเพิ่มไป ตอนนี้เราจะรู้สาเหตุที่ IF มันทำงานผิดปกติ เพราะค่าที่ได้จาก VB6 และ .NET ตอนเดือนที่ 12 ไม่เหมือนกันนี่เอง แก้ไข ปรับ Logic ของ .NET ใช้วิธีบวกลูกทุ่งแบบ VB6 ไปครับ ได้บทเรียนเหมือนกัน กับประเด็นเล็กๆน้อยๆ ที่ต้องระวังเวลา Convert ระบบจากภาษาเก่า > ใหม่ บางทีความสะดวกสบาย อาจจะสร้าง Defect แปลกๆได้ Reference DateTime.AddMonths(Int32) Method (System) | Microsoft Docs