การจัดรูปแบบวันที่และเวลา ในภาษา C

29 June 2021

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับการจัดรูปแบบวันที่และเวลาในภาษา C เพื่อจัดรูปแบบการแสดงผลของวันที่และเวลาให้อยู่ในรูปแบบที่กำหนดหรือตามความต้องการของโปรแกรม นี่เป็นเนื้อหาในบทนี้

  • การแสดงผลเวลาในภาษา C
  • การจัดรูปแบบวันที่และเวลา
  • ตัวจัดรูปแบบวันที่และเวลา

การแสดงผลเวลาในภาษา C

ในการทำงานกับวันที่และเวลาในภาษา C เราใช้ฟังก์ชัน ctime สำหรับจัดรูปแบบการแสดงผลของวันที่ในรูปแบบที่มนุษย์สามารถเข้าใจได้ แต่ฟังก์ชันนี้สนับสนุนเพียงแค่รูปแบบเดียวนั่นคือ

Www Mmm dd hh:mm:ss yyyy

นี่เป็นรูปแบบของวันที่ที่เราสามารถแปลงได้โดยการใช้ฟังก์ชัน ctime โดยการส่งออบเจ็คของเวลาเข้าไปยังฟังก์ชัน และเราจะได้เวลาในรูปแบบ C-string ที่สอดคล้องกับเวลาท้องถิ่นจากออบเจ็คของเวลาดังกล่าว ยกตัวอย่างเช่น

current_time.c
#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" นี่เป็นรูปแบบของวันที่ที่ใช้ในประเทศไทย โดยที่แสดง วัน เดือน ปี และเวลาในรูปแบบ ชั่วโมง:นาที:วินาที

datetime_formats.c
#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 ที่เราได้แนะนำไปตอนต้นของบทเรียน

us_n_iso_date.c
#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 จะไม่ถูกแปลงค่าเนื่องจากมันเป็นตัวอักษรที่ไม่ได้ขึ้นต้นด้วยเครื่องหมาย % ดังนั้นฟังก์ชันถือว่าเป็นตัวอักษรที่ถูกเพิกเฉย

ในการจัดรูปแบบการของวันที่และเวลา คุณมีอิสระในการจัดเรียงและสามารถใช้ตัวจัดรูปแบบได้ตามที่ต้องการ ในตัวอย่างนี้ เป็นการจัดรูปแบบที่แสดงวันที่และเวลาแยกออกจากกัน

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

บทความนี้เป็นประโยชน์หรือไม่? Yes · No