Pair Programming : ระบบคำนวณวันส่งของ

คุณและเพื่อนร่วมทีมจะพัฒนาโปรแกรมในภาษา Go ที่คำนวณวันส่งของโดยประมาณจากวันสั่งซื้อ (order creation date) และจำนวนวันที่ใช้ในการจัดส่ง (delivery days) โดยมีความต้องการดังนี้

1. รับข้อมูลเข้า (Input)

  • Order Date รับวันและเวลาในรูปแบบ ISO 8601 (เช่น 2024-01-20T07:00:00+07:00) ซึ่งเป็นวันสั่งซื้อ (created_at)
  • Delivery Days รับจำนวนวันที่ใช้ในการจัดส่ง (เช่น 3 หรือ 25)
  • User Timezone รับ Timezone ของผู้ใช้ (เช่น Asia/Bangkok หรือ Europe/London)

2. การคำนวณ (Process)

  • แปลง String ของ Order Date ที่รับเข้ามาให้เป็นค่า time.Time ด้วย Layout time.RFC3339
  • แปลงเวลา Order Date ให้เป็นเวลา UTC ก่อนทำการคำนวณ (เพื่อหลีกเลี่ยงปัญหาการเปลี่ยนแปลงตาม DST)
  • คำนวณวันส่งของโดยการเพิ่มจำนวนวันตามที่กำหนด (ใช้ AddDate)
  • หลังจากคำนวณใน UTC แล้ว ให้แปลงผลลัพธ์กลับไปเป็นเวลาของ Timezone ที่ผู้ใช้ระบุ (ใช้ In(userLocation))

3. การแสดงผล (Output)

  • แสดง Order Date ในรูปแบบ ISO 8601 ตาม Timezone ของผู้ใช้
  • แสดง Estimated Delivery Date ในรูปแบบ ISO 8601 ตาม Timezone ของผู้ใช้
  • แสดงจำนวนวัน (Duration) ที่คำนวณได้ระหว่าง Order Date กับ Estimated Delivery Date