- การแสดงผลเวลาในภาษา 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
สำหรับจัดรูปแบบของวันที่และเวลา ซึ่งนี่มีประโยชน์เมื่อโปรแกรมของนักเรียนต้องการแสดงวันที่และเวลาในรูปแบบที่กำหนดเอง