Dynamics 365 Business Central: การใช้งาน ConvertDateTimeFromUTCToTimeZone ใน TypeHelper Codeunit

ในการพัฒนาแอปพลิเคชันด้วยภาษา AL สำหรับ Microsoft Dynamics 365 Business Central การจัดการกับวันที่และเวลา (DateTime) เป็นสิ่งที่สำคัญ โดยเฉพาะอย่างยิ่งเมื่อมีการใช้งานในหลายเขตเวลา (Time Zones) ฟังก์ชัน ConvertDateTimeFromUTCToTimeZone ใน TypeHelper Codeunit ช่วยให้คุณสามารถแปลงค่า DateTime จาก UTC ไปยัง Time Zone ที่ต้องการได้อย่างง่ายดาย

รายละเอียดของฟังก์ชัน

รูปแบบของฟังก์ชัน

procedure ConvertDateTimeFromUTCToTimeZone(InputDateTime: DateTime; TimeZoneTxt: Text): DateTime
var
    TimeZoneInfo: DotNet TimeZoneInfo;
    Offset: Duration;
begin
    if TimeZoneTxt = '' then
        exit(InputDateTime);

    GetUserClientTypeOffset(Offset);
    InputDateTime := InputDateTime - Offset;

    TimeZoneInfo := TimeZoneInfo.FindSystemTimeZoneById(TimeZoneTxt);
    exit(InputDateTime + TimeZoneInfo.BaseUtcOffset);
end;

พารามิเตอร์

  • InputDateTime: ค่าวันที่และเวลาในรูปแบบ UTC ที่ต้องการแปลง
  • TimeZoneTxt: ชื่อของ Time Zone ที่ต้องการแปลงไป

คำอธิบาย

ฟังก์ชันนี้จะรับค่า DateTime ในรูปแบบ UTC และแปลงไปยัง Time Zone ที่ระบุโดย TimeZoneTxt ถ้า TimeZoneTxt ว่างเปล่า ฟังก์ชันจะคืนค่า InputDateTime โดยไม่ทำการแปลง

การทำงานภายในของฟังก์ชัน

  1. ตรวจสอบ TimeZoneTxt: ถ้า TimeZoneTxt เป็นค่าว่าง (''), ฟังก์ชันจะคืนค่า InputDateTime ทันที
  2. ปรับค่า Offset ของผู้ใช้: เรียกใช้ GetUserClientTypeOffset(Offset); เพื่อปรับค่าชดเชยของเวลาตามประเภทของ Client ที่ผู้ใช้กำลังใช้งาน
  3. แปลง TimeZoneTxt เป็น TimeZoneInfo: ใช้ TimeZoneInfo.FindSystemTimeZoneById(TimeZoneTxt); เพื่อหา Time Zone ที่ตรงกับชื่อที่ระบุ
  4. คำนวณเวลาที่แปลงแล้ว: นำค่า InputDateTime ลบด้วย Offset และบวกกับ TimeZoneInfo.BaseUtcOffset เพื่อให้ได้เวลาที่ถูกต้องใน Time Zone ที่ต้องการ

ตัวอย่างการใช้งาน

ตัวอย่างที่ 1: แปลงเวลาจาก UTC ไปยัง “Pacific Standard Time”

procedure TestConvertDateTime()
var
    TypeHelper: Codeunit "Type Helper";
    InputDateTime: DateTime;
    OutputDateTime: DateTime;
    TimeZoneTxt: Text;
begin
    InputDateTime := CURRENTDATETIME;
    TimeZoneTxt := 'Pacific Standard Time';

    OutputDateTime := TypeHelper.ConvertDateTimeFromUTCToTimeZone(InputDateTime, TimeZoneTxt);

    MESSAGE('เวลาปัจจุบันใน Pacific Standard Time คือ %1', FORMAT(OutputDateTime));
end;

คำอธิบายตัวอย่าง

  • กำหนด InputDateTime เป็นเวลาปัจจุบันใน UTC โดยใช้ CURRENTDATETIME
  • กำหนด TimeZoneTxt เป็น 'Pacific Standard Time'
  • เรียกใช้ฟังก์ชัน ConvertDateTimeFromUTCToTimeZone เพื่อแปลงเวลา
  • แสดงผลลัพธ์โดยใช้ MESSAGE

สรุป

ฟังก์ชัน ConvertDateTimeFromUTCToTimeZone ใน TypeHelper Codeunit เป็นเครื่องมือที่มีประโยชน์สำหรับการแปลงเวลาจาก UTC ไปยัง Time Zone ที่ต้องการ โดยรองรับการใช้งานกับ Time Zone ต่าง ๆ ที่ระบบปฏิบัติการรองรับ การเข้าใจการทำงานและการใช้งานฟังก์ชันนี้จะช่วยให้การพัฒนาแอปพลิเคชันด้วยภาษา AL มีประสิทธิภาพมากยิ่งขึ้น

Leave a comment