การจัดรูปแบบวันที่และเวลา ในภาษา C
ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับการจัดรูปแบบวันที่และเวลาในภาษา C เพื่อจัดรูปแบบการแสดงผลของวันที่และเวลาให้อยู่ในรูปแบบที่กำหนดหรือตามความต้องการของโปรแกรม นี่เป็นเนื้อหาในบทนี้
- การแสดงผลเวลาในภาษา C
- การจัดรูปแบบวันที่และเวลา
- ตัวจัดรูปแบบวันที่และเวลา
การแสดงผลเวลาในภาษา C
ในการทำงานกับวันที่และเวลาในภาษา C เราใช้ฟังก์ชัน ctime สำหรับจัดรูปแบบการแสดงผลของวันที่ในรูปแบบที่มนุษย์สามารถเข้าใจได้ แต่ฟังก์ชันนี้สนับสนุนเพียงแค่รูปแบบเดียวนั่นคือ
Www Mmm dd hh:mm:ss yyyy
นี่เป็นรูปแบบของวันที่ที่เราสามารถแปลงได้โดยการใช้ฟังก์ชัน ctime โดยการส่งออบเจ็คของเวลาเข้าไปยังฟังก์ชัน และเราจะได้เวลาในรูปแบบ C-string ที่สอดคล้องกับเวลาท้องถิ่นจากออบเจ็คของเวลาดังกล่าว ยกตัวอย่างเช่น
#include <stdio.h>
#include <time.h>
int main()
{
time_t now;
time(&now);
printf("The current local time is: %s", ctime(&now));
printf("The current timestamp is: %ld", now);
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
The current local time is: Tue May 04 17:35:20 2021
The current timestamp is: 1620124520
ในตัวอย่างนี้ เป็นการแสดงวันที่และเวลาปัจจุบันออกทางหน้าจอโดยการใช้ฟังก์ชันจากไลบรารี time.h ในภาษา C เราสร้างออบเจ็คของวันที่ด้วยฟังก์ชัน time และจัดรูปแบบการแสดงผลของมันด้วยฟังก์ชัน ctime
printf("The current timestamp is: %ld", now);
ออบเจ็คของวันที่นั้นเก็บเวลาในรูปแบบของ Timestamp ซึ่งเวลาในรูปแบบนี้ใช้โดยคอมพิวเตอร์ในการนับเวลาและการคำนวณ แต่เมื่อเรานำมันมาแสดงให้กับผู้ใช้งานโปรแกรมเช่นเรา เราใช้รูปแบบของเวลาที่มนุษย์สามารถอ่านเข้าใจได้แทน
รูปแบบของเวลาที่ใช้ในโลกนั้นมีหลากหลายและอาจแตกต่างกันขึ้นอยู่กับประเทศและภูมิภาคที่ต้องการดูเวลาดังกล่าว ยกตัวอย่างเช่น ในอเมริการูปแบบของวันที่และเวลาที่ใช้แสดงในคอมพิวเตอร์มักจะอยู่ในรูปแบบ
May 16, 2021 05:31:56 PM
ในขณะที่การแสดงวันที่และเวลาในประเทศไทย รูปแบบของวันที่และเวลาที่ใช้และเป็นที่นิยมมักจะอยู่ในรูปแบบ
16 May 2021 17:31:56
หรือวันที่และเวลาในรูปแบบของ ISO 8601 ที่ใช้โดยระบบคอมพิวเตอร์ทั่วโลก
2021-05-16T17:31:56Z
จะเห็นว่านี่เป็นเวลาเดียวกันแต่แสดงในรูปแบบที่แตกต่างกัน นั่นหมายความว่าแต่ละประเทศและภูมิภาคคุ้นเคยและใช้งานในรูปแบบที่แตกต่างกัน ด้วยเหตุนี้ เราจึงต้องการวิธีจัดรูปแบบของวันที่และเวลาในรูปแบบที่ต้องการ เพื่อให้เหมาะสมกับผู้ใช้งานหรือตามความต้องการของโปรแกรม และในภาษา C เราสามารถจัดรูปแบบของวันที่และเวลาได้ด้วยฟังก์ชัน strftime จากไลบรารี time.h
การจัดรูปแบบวันที่และเวลา
ในภาษา C นั้นมีฟังก์ชันสำหรับจัดรูปแบบของวันที่และเวลา นั่นคือฟังก์ชัน strftime ซึ่งนี่เป็นฟังก์ชันจากไลบรารีมาตฐาน time.h ของภาษา C และนี่เป็นรูปแบบการใช้งานของมัน
size_t strftime(char* ptr, size_t maxsize, const char* format,
const struct tm* timeptr);
ในการใช้งาน ฟังก์ชันนี้รับสี่พารามิเตอร์สำหรับจัดรูปแบบของวันที่และเวลา ได้แก่
- ptr: พอยน์เตอร์สำหรับเก็บผลลัพธ์ของการจัดรูปแบบวันที่และเวลาที่จะส่งกลับโดยฟังก์ชัน
- maxsize: ขนาดสูงสุดของผลลัพธ์ที่จะคัดลอกมายัง
ptrถ้าหากความยาวของผลลัพธ์เกินค่านี้มันจะถูกตัดออก - format: String ที่ประกอบไปด้วยข้อความปกติและตัวจัดรูปแบบของวันที่และเวลาในภาษา C ตัวจัดรูปแบบการแสดงผลจะเริ่มต้นด้วยเครื่องหมาย
%และจะถูกแทนที่ด้วยวันที่และเวลาโดยฟังก์ชัน - timeptr: พอยน์เตอร์โครงสร้างข้อมูลของวันที่และเวลา
tmสำหรับจัดรูปแบบการแสดงผลนี้
ฟังก์ชัน strftime ส่งค่ากลับเป็นขนาดทั้งหมดของ String ที่ถูกแปลงได้โดยการจัดรูปแบบการแสดงผลที่ไม่เกิน maxsize ต่อไปมาดูตัวอย่างการจัดรูปแบบการแสดงผลวันที่และเวลาในภาษา C โดยการใช้งานฟังก์ชันดังกล่าว
ในตัวอย่างนี้ เป็นการใช้ฟังก์ชัน strftime สำหรับจัดรูปแบบการแสดงผลของวันที่และเวลาในรูปแบบ "16 May 2021 17:31:56" นี่เป็นรูปแบบของวันที่ที่ใช้ในประเทศไทย โดยที่แสดง วัน เดือน ปี และเวลาในรูปแบบ ชั่วโมง:นาที:วินาที
#include <stdio.h>
#include <time.h>
int main ()
{
time_t rawtime;
struct tm * timeinfo;
char buffer[80];
time(&rawtime);
timeinfo = localtime(&rawtime);
strftime(buffer, 80, "%d %B %Y %H:%M:%S", timeinfo);
printf("%s\n", buffer);
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
16 May 2021 17:49:19
ในตัวอย่างนี้ เป็นการจัดรูปแบบการแสดงของวันที่และเวลาด้วยฟังก์ชัน strftime ในภาษา C โปรแกรมนี้แสดงผลเวลาในขณะที่บทความนี้กำลังเขียนอยู่ เมื่อวันที่ 16 พฤษภาคม 2020 เวลา 17:49 นาฬิาในประเทศไทย ต่อไปเป็นการอธิบายการทำงานในแต่ส่วนของโปรแกรม
#include <time.h>
ในตอนแรกเราได้นำเข้าไลบรารี time.h เพื่อใช้งานฟังก์ชันเกี่ยวกับวันที่และเวลา
time_t rawtime;
struct tm * timeinfo;
char buffer[80];
จากนั้นเราได้ประกาศสามตัวแปร ตัวแปร rawtime มีประเภทข้อมูลเป็น time_t สำหรับเก็บค่าของเวลา ตัวแปร timeinfo เป็นโครงสร้างข้อมูล tm ของเวลาสำหรับนำไปจัดรูปแบบ ส่วน buffer เป็นตัวแปรอาเรย์ของ char สำหรับเก็บผลลัพธ์การจัดรูปแบบของวันที่และเวลา
time(&rawtime);
คำสั่งนี้เป็นการใช้ฟังก์ชัน time เพื่อรับเอาเวลาปัจจุบันในระบบมาเก็บไว้ในตัวแปร rawtime ซึ่งมันเป็นค่าของเวลาในรูปแบบ Timestamp
timeinfo = localtime(&rawtime);
นี่เป็นการแปลงเวลาให้เป็นโครงสร้างของเวลาด้วยฟังก์ชัน localtime และเก็บมันไว้ในตัวแปร timeinfo ที่เราจะใช้สำหรับจัดรูปแบบของวันที่และเวลาในขั้นตอนต่อไป
strftime(buffer, 80, "%d %B %Y %H:%M:%S", timeinfo);
จากนั้นเป็นการจัดรูปแบบของวันที่และเวลาด้วยฟังก์ชัน strftime ซึ่งนี่จะเก็บผลลัพธ์ลงในตัวแปรอาเรย์ buffer ที่ม่ีขนาดไม่เกิน 80 ตัวอักษร รูปแบบที่ใช้ในการจัดรูปแบบการแสดงผลคือ %d %B %Y %H:%M:%S และค่านำเข้าของเวลาที่ใช้ในการจัดรูปแบบคือ timeinfo
ตัวจัดรูปแบบนั้นจะเริ่มต้นด้วยตัวอักษร % ตามด้วยตัวอักษรใดๆ ที่มีความหมายแตกต่างกันออกไป เราสามารถใส่ตัวอักษรหรือข้อความปกติเข้าไปใน String จัดรูปแบบได้ ซึ่งนี่จะถูกเพิกเฉยต่อการแปลงค่าโดยฟังก์ชัน strftime และนี่เป็นคำอธิบายของตัวจัดรูปแบบที่เราใช้
- %d: วันที่ของเดืิอนแบบสองหลัก
- %B: ชื่อของเดือนในรูปแบบเต็ม
- %Y: ปีแบบตัวเลขสี่หลัก
- %H: ชั่วโมงแบบ 24 ชั่วโมงแบบสองหลัก
- %M: นาทีแบบสองหลัก
- %S: วินาทีแบบสองหลัก
นั่นหมายความว่าคุณสามารถใช้ตัวจัดรูปแบบอะไรก็ได้ที่สนับสนุนในภาษา C และจัดเรียงตำแหน่งได้อย่างเป็นอิสระตามที่ต้องการ
มาดูตัวอย่างถัดไปสำหรับการจัดรูปแบบวันที่และเวลา ในตัวอย่างนี้ เป็นการแสดงเวลาในรูปแบบของอเมริกาและ ISO 8601 ที่เราได้แนะนำไปตอนต้นของบทเรียน
#include <stdio.h>
#include <time.h>
int main ()
{
time_t rawtime;
struct tm * timeinfo;
char buffer[80];
time(&rawtime);
timeinfo = localtime(&rawtime);
strftime(buffer, 80, "%B %d, %Y %I:%M:%S %p", timeinfo);
printf("%s\n", buffer);
strftime(buffer, 80, "%Y-%m-%dT%H:%M:%SZ", timeinfo);
printf("%s\n", buffer);
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
May 16, 2021 06:13:33 PM
2021-05-16T18:13:33Z
รูปแบบการแสดงผลนั้นเปลี่ยนไปจากตัวจัดรูปแบบที่เรากำหนดให้กับฟังก์ชัน strftime และอย่างที่ทราบ การแสดงวันที่และเวลาในประเทศสหรัฐอเมริกาจะเป็นแบบ เดือน วัน ปี และเวลาในรูปแบบ 12 ชั่วโมง ที่มี AM/PM ระบุ
strftime(buffer, 80, "%B %d, %Y %I:%M:%S %p", timeinfo);
เพื่อแสดงชั่วโมงในรูปแบบ 12 ชั่วโมง เราจะใช้ตัวจัดรูปแบบเป็น %I ส่วน %p นั้นใช้สำหรับแปลงส่วนของเวลาว่าเป็น AM หรือ PM
strftime(buffer, 80, "%Y-%m-%dT%H:%M:%SZ", timeinfo);
ส่วนคำสั่งที่สองเป็นการแสดงวันที่และเวลาในรูปแบบ ISO 8601 ซึ่งจะแสดงวันที่ในรูปแบบ ปี เดือน วัน สำหรับตัวอักษร -, T และ Z จะไม่ถูกแปลงค่าเนื่องจากมันเป็นตัวอักษรที่ไม่ได้ขึ้นต้นด้วยเครื่องหมาย % ดังนั้นฟังก์ชันถือว่าเป็นตัวอักษรที่ถูกเพิกเฉย
ในการจัดรูปแบบการของวันที่และเวลา คุณมีอิสระในการจัดเรียงและสามารถใช้ตัวจัดรูปแบบได้ตามที่ต้องการ ในตัวอย่างนี้ เป็นการจัดรูปแบบที่แสดงวันที่และเวลาแยกออกจากกัน
#include <stdio.h>
#include <time.h>
int main ()
{
time_t rawtime;
struct tm * timeinfo;
char buffer[80];
time(&rawtime);
timeinfo = localtime(&rawtime);
printf("Current date and time\n");
strftime(buffer, 80, "Date: %m/%d/%y", timeinfo);
printf("%s\n", buffer);
strftime(buffer, 80, "Time: %H:%M:%S", timeinfo);
printf("%s\n", buffer);
return 0;
}
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
Current date and time
Date: 05/16/21
Time: 18:24:41
ในตัวอย่าง เราได้จัดรูปแบบที่แสดงเพียงวันที่และเวลาแยกออกจากกันโดยระบุเพียงส่วนที่ต้องการใน String จัดรูปแบบ นอกจากนี้เราสามารถใส่ข้อความอย่าง Date: และ Time: และอย่างที่คุณทราบนี่จะถูกเพิกเฉยโดยตัวแปลงเนื่องจากมันถูกมองว่าเป็นอักษรธรรมดา
และนี่ก็เป็นตัวอย่างพื้นฐานสำหรับการจัดรูปแบบการแสดงผลของวันที่และเวลาโดยการใช้งานฟังก์ชัน strftime ในภาษา C ต่อไปมาดูตัวจัดรูปแบบวันที่และเวลาที่สนับสนุน และสามารถใช้งานได้ทั้งหมดในภาษา C
ตัวจัดรูปแบบวันที่และเวลา
สำหรับตัวจัดรูปแบบการแสดงผลทั้งหมดที่สามารถใช้ได้ในภาษา C นั้นสามารถแสดงพร้อมกับคำอธิบายการทำงานของมันได้ดังตารางต่อไปนี้
| ตัวจัดรูปแบบ | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| %a | ชื่อวันในสัปดาห์แบบย่อ | Thu |
| %A | ชื่อวันในสัปดาห์แบบเต็ม | Thursday |
| %b | ชื่อเดือนแบบย่อ | Aug |
| %B | ชื่อเดือนแบบเต็ม | August |
| %c | วันที่และเวลา | Thu Aug 23 14:55:02 2001 |
| %d | วันของเดือนเดิม 0 ด้านหน้า (01-31) | 23 |
| %H | ชั่วโมงในรูปแบบ 24 ชั่วโมง (00-23) | 14 |
| %I | ชั่วโมงในรูปแบบ 12 ชั่วโมง (01-12) | 02 |
| %j | วันของปี (001-366) | 235 |
| %m | เดือนเป็นตัวเลข (01-12) | 08 |
| %M | นาที (00-59) | 55 |
| %p | ตัวบ่งบอก AM หรือ PM | PM |
| %S | วินาที (00-61) | 02 |
| %U | เลขของสัปดาห์โดยให้วันอาทิตย์แรกเป็นวันแรกของสัปดาห์ที่ 1 (00-53) | 33 |
| %w | เลขของวันในสัปดาห์โดยวันอาทิตย์เป็น 0 (0-6) | 4 |
| %W | เลขของสัปดาห์โดยให้วันจันทร์แรกเป็นวันแรกของสัปดาห์ที่ 1 (00-53) | 34 |
| %x | การแสดงวันที่ | 08/23/01 |
| %X | การแสดงเวลา | 14:55:02 |
| %y | ปีสองหลักสุดท้าย (00-99) | 01 |
| %Y | ปี | 2001 |
| %Z | ชื่อเขตเวลาหรือตัวย่อ เป็นค่าว่างหากไม่สามารถตรวจสอบได้ | CDT |
| %% | สัญลักษณ์ % | % |
นี่เป็นตัวจัดรูปแบบการแสดงผลวันที่และเวลามาตรฐานที่คุณสามารถใช้ได้ในภาษา C จากในตารางจะเห็นว่าในการแสดงสัญลักษณ์ % ใน String จัดรูปแบบการแสดงผล คุณจะต้องใช้ %% เนื่องจากหนึ่งตัวนั้นใช้กำหนดตัวจัดรูปแบบ
ในบทนี้ คุณได้เรียนรู้การใช้ฟังก์ชัน strftime ในภาษา C ซึ่งเป็นฟังก์ชันจากไลบรารีมาตรฐาน time.h สำหรับจัดรูปแบบของวันที่และเวลา ซึ่งนี่มีประโยชน์เมื่อโปรแกรมของคุณต้องการแสดงวันที่และเวลาในรูปแบบที่กำหนดเอง