|
ขอบพระคุณอาจารย์ทองก้อนเป็นอย่างสูงครับ
ผมขออนุญาตอาจารย์ทองก้อนแบ่งปันให้สมาชิกทุกท่านในอีกรูปแบบหนึ่ง
นั่นก็คือการเรียกใช้คลาสใน .Net (CultureInfo Class & DateTimeFormatInfo Class)
ทุกท่านสามารถดูเพิ่มเติมได้ที่
CultureInfo Class => https://docs.microsoft.com/en-us/dotnet/api/system.globalization.cultureinfo?view=netframework-4.7.2
DateTimeFormatInfo Class => https://docs.microsoft.com/en-us/dotnet/api/system.globalization.datetimeformatinfo?view=netframework-4.7.2
ช่วยจัดการเกี่ยวกับวันที่ , สกุลเงิน ให้อยู่ในรูปแบบสอดคล้องกับการตั้งค่า Region/Language
(อธิบายให้เข้าใจง่ายขึ้นคือ เช่น ได้ค่าปี พ.ศ. มาจาก DatetimePicker = 2019
กรณีที่ผมกำหนด CultureInfo = "th-TH" ผลลัพธ์ที่ได้คือ เลข พ.ศ. = 2562
กรณีที่ผมกำหนด CultureInfo = "en-US" ผลลัพธ์ที่ได้คือ เลข ค.ศ. = 2019 เป็นต้น)
ก่อนอื่น ต้อง Import Namespace: Imports System.Globalization เข้ามาใน Project เพื่ออ้างอิงการใช้ CultureInfo Class & DateTimeFormatInfo Class
มาดูตัวอย่างโค้ดกันครับ
วิธีที่ 1 : ผมจะเขียนให้มันยืดหยุ่น เพื่อกำหนด CultureInfo และ Date_Format ได้
เวลานำไปใช้งาน เช่น
พ.ศ.
FormatMyDate(วันที่,"th-TH","MM/dd/yyyy") ผลลัทธ์ที่ได้ คือ พ.ศ. => รูปแบบวันที่ เดือน/วัน/ปี (สำหรับ MS-Access)
FormatMyDate(วันที่,"th-TH","dd/MM/yyyy") ผลลัทธ์ที่ได้ คือ พ.ศ. => รูปแบบวันที่ วัน/เดือน/ปี
FormatMyDate(วันที่,"th-TH","dd-MM-yyyy") ผลลัทธ์ที่ได้ คือ พ.ศ. => รูปแบบวันที่ วัน-เดือน-ปี
FormatMyDate(วันที่,"th-TH","yyyy-MM-dd") ผลลัทธ์ที่ได้ คือ พ.ศ. => รูปแบบวันที่ ปี-เดือน-วัน (สำหรับ SQL Server)
FormatMyDate(วันที่,"th-TH","yyyy") ผลลัทธ์ที่ได้ คือ พ.ศ. => รูปแบบวันที่ ปี (เช่น 2562)
ค.ศ.
FormatMyDate(วันที่,"en-US","MM/dd/yyyy") ผลลัทธ์ที่ได้ คือ ค.ศ. => รูปแบบวันที่ เดือน/วัน/ปี (สำหรับ MS-Access)
FormatMyDate(วันที่,"en-US","dd/MM/yyyy") ผลลัทธ์ที่ได้ คือ ค.ศ. => รูปแบบวันที่ วัน/เดือน/ปี
FormatMyDate(วันที่,"en-US","dd-MM-yyyy") ผลลัทธ์ที่ได้ คือ ค.ศ. => รูปแบบวันที่ วัน-เดือน-ปี
FormatMyDate(วันที่,"en-US","yyyy-MM-dd") ผลลัทธ์ที่ได้ คือ ค.ศ. => รูปแบบวันที่ ปี-เดือน-วัน (สำหรับ SQL Server)
FormatMyDate(วันที่,"en-US","yyyy") ผลลัทธ์ที่ได้ คือ ค.ศ. => รูปแบบวันที่ ปี (เช่น 2019)
หมายเหตุ หากต้องการใช้ร่วมกับ SQL Server ตรง Return ให้ลบ String "#" ตามที่ผมแต้มสีแดงออก
Return "#" & MyDate.ToString(Date_Format, dtfi) & "#"
- '// Return Date by CultureInfo Class(Ex. th-TH / en-US) and Date format(Ex. MM/dd/yyyy or dd/MM/yyyy)
- Function FormatMyDate(ByVal MyDate As Date, ByVal CultureInfo_Name As String, ByVal Date_Format As String) As String
- Dim dtfi As DateTimeFormatInfo = CultureInfo.GetCultureInfo(CultureInfo_Name).DateTimeFormat
- Return "#" & MyDate.ToString(Date_Format, dtfi) & "#"
- End Function
คัดลอกไปที่คลิปบอร์ด
วิธีที่ 2 : หากท่านใดต้องการใช้งานฟังก์ชั่นแบบตรง ๆ ไม่ต้องการกำหนดค่าพารามิเตอร์จะเขียนแบบนี้
เช่น ต้องการรูปแบบวันที่ => เดือน/วัน/ปี (โดยปีอยู่ในรูปแบบของ ค.ศ.)
- '// Return Date by CultureInfo Class with condition (CultureInfo= en-US and Dateformat = MM/dd/yyyy)
- Function FormatMyDate2(ByVal MyDate As Date) As String
- Dim dtfi As DateTimeFormatInfo = CultureInfo.GetCultureInfo("en-US").DateTimeFormat
- Return "#" & MyDate.ToString("MM/dd/yyyy", dtfi) & "#"
- End Function
คัดลอกไปที่คลิปบอร์ด
ส่วนการใช้งานคิวรี่ ผมใช้ฟังก์ชั่นในวิธีที่ 1 เขียนดังนี้
- strSQL = "SELECT * FROM Sample " &
- " WHERE " &
- " DateField BETWEEN " &
- FormatMyDate(dtpDateBegin.Value, "en-US", "MM/dd/yyyy") &
- " AND " &
- FormatMyDate(dtpDateEnd.Value, "en-US", "MM/dd/yyyy") &
- " ORDER BY PrimaryKey "
คัดลอกไปที่คลิปบอร์ด
สุดท้ายนี้ ผมอยากแบ่งปันในสิ่งที่ผมได้จากอาจารย์มาแบ่งปันให้กับสมาชิกหลาย ๆ ท่าน
เพื่อให้ท่านใดที่สนใจได้นำไปศึกษาต่อยอดแล้วกลับมาแบ่งปันกันต่อไปแบบไม่สิ้นสุดครับ
ไม่ว่าจะเป็นวิธีที่อาจารย์ถ่ายทอดให้ (ท่านก็ต้องรู้จักวิธีคิด ถึงจะได้ผลลัพธ์) หรือวิธีที่ผมใช้ (ท่านก็ต้องรู้จักคลาสใน .Net)
สิ่งที่เหมือนกันคือต้องเรียนรู้และเข้าใจใช้งานครับ
ท่านสามารถดาวน์โหลดตัวอย่างโปรแกรมได้ตามด้านล่างนี้
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|