strptime ()- Dizgiyi Tarih/Saat 'e Dönüştür

Biçim

#include <time.h>
char *strptime(const char *buf, const char *format, struct tm *tm);

Dil Düzeyi

XPG4

İş parçacığı korumalı

Evet

Yerel Ayara Duyarlı

Bu işlevin davranışı, yürürlükteki ülke değerinin LC_CTYPE, LC_TIME ve LC_TOD kategorilerinden etkilenebilir. Derleme komutunda LOCALETYPE (*CLD) belirlendiğinde bu işlev kullanılamaz. Daha fazla bilgi için CCSID ' leri ve Yerel Ayarları Anlamabaşlıklı konuya bakın.

Tanımlama

strptime() işlevi, buf tarafından gösterilen karakter dizgisini, formatile belirtilen biçimi kullanarak tmtarafından gösterilen tm yapısında saklanan değerlere dönüştürür.

Biçim sıfır ya da daha fazla yönerge içerir. Bir yönerge, olağan bir karakter (% ya da beyaz alan değil) ya da bir dönüştürme belirtimi içeriyor. Her dönüştürme belirtimi, bir% karakterinden ve ardından bir ya da daha fazla dönüştürme karakterinden oluşur; bu, gerekli değiştirme işlemini belirtir. İşlevin beklendiği gibi davranmasını garantilemek için hem buf , hem de format içinde beyaz alan ya da başka bir sınırlayıcı olmalıdır. İki dizgiden sayıya dönüştürme arasında bir sınırlayıcı olmalıdır; tersi durumunda, ilk sayı dönüştürme, ikinci dönüştürme belirticisine ait karakterleri dönüştürebilir.

Bir yönerge biçim dizgisinde ya da giriş dizgisinde taranmadan önce karşılaşılan herhangi bir beyaz alan ( isspace()tarafından belirtildiği gibi) yoksayılır. Olağan karakter olan bir yönergenin, giriş dizgisindeki sonraki taranan karakterle tam olarak eşleşmesi gerekir. Olağan karakter yönergelerini eşleştirirken büyük/küçük harf durumu anlamlıdır. Biçim dizgisindeki olağan karakter yönergesi giriş dizgisindeki karakterle eşleşmiyorsa, strptime() başarısız olur. Başka karakter taranmayacak.

Diğer dönüştürme belirtimleri, bu belirtim için olası bir karakter olmayan bir karakter bulununcaya ya da daha fazla karakter taranıncaya kadar giriş dizgisindeki tarama karakterleriyle eşleştirilir. Belirtim dizgiden sayıya ise, olası karakter aralığı +,-ya da isdigit()ile belirtilen bir karakterdir. Sayı belirticileri baştaki sıfırları gerektirmez. Belirtimin geçerli yerel ayardaki bir alanla eşleşmesi gerekiyorsa, bir eşleşme bulununcaya kadar tarama yinelenir. Yerel ayarda alanlar eşleştirilirken büyük/küçük harf durumu yoksayılır. Bir eşleşme bulunursa, tm tarafından gösterilen yapı ilgili yerel bilgilerle güncellenir. Eşleşme bulunamazsa, strptime() başarılı olmaz. Başka karakter taranmayacak.

Yeterli bilgi verilirse, tm yapısındaki eksik alanlar strptime() tarafından doldurulabilir. Örneğin, bir tarih verilirse, tm_yday hesaplanabilir.

Her standart dönüştürme belirtimi, aşağıdaki tabloda açıklandığı gibi uygun karakterlerle değiştirilir:

Belirleyici Anlamı
%a Haftanın günü adı, tam ad ya da kısaltma olabilir.
%A %a ile aynı.
%b Ay adı, tam ad ya da kısaltma olabilir.
%B %bile aynı.
%c Yerel ayar biçiminde tarih/saat.
%C Yüzyıl numarası [ 00-99]. İki basamaklı bir yıl kullanılıyorsa yılı hesaplar.
%d Ayın günü [ 1-31].
%D Tarih biçimi, %m/%d/%y ile aynı.
%e %dile aynı.
%g ISO hafta tarihinin 2 basamaklı yıl bölümü [ 00-99].
%G ISO hafta tarihinin 4 basamaklı yıl bölümü. Negatif olabilir.
%h %bile aynı.
%H 24 saat biçiminde saat [ 0-23].
%I 12 saatlik biçimde saat [ 1-12].
%j Yılın günü [ 1-366].
%m Ay [ 1-12].
%M Dakika [ 0-59].
%n Yeni satır karakteri bulununcaya kadar tüm beyaz alanları atlayın.
%p 12 saatlik biçim kullanılıyorsa saati hesaplamak için kullanılan AM ya da PM dizgisi.
%r Yerel ayarın AM/PM biçiminde saat. Yerel ayar saat biçiminde yoksa, varsayılan değer olarak POSIX saat AM/PM biçimi: %I: %M: %S %p kullanılır.
%R Saniyesiz 24 saatlik zaman biçimi, %H: %M ile aynı
%S İkinci [ 00-61]. Saniyeler için aralık, bir adım saniye ve bir çift adım saniyeye izin verir.
%t Bir sekme karakteri bulununcaya kadar tüm beyaz alanları atlayın.
%T Saniye ile 24 saatlik zaman biçimi, %H: %M: %S ile aynı.
%u Hafta içi [ 1-7]. Pazartesi 1, Pazar 7.
%U Yılın hafta sayısı [ 0-53], Pazar haftanın ilk günüdür. Yılın gününü hesaplamada kullanılır.
%V ISO yılın hafta numarası [ 1-53]. Pazartesi haftanın ilk günüdür. 1st ' ı içeren haftanın yeni yılda dört ya da daha fazla günü varsa, 1. hafta olarak kabul edilir. Aksi takdirde, bir önceki yılın son haftası ve bir sonraki hafta yeni yılın 1. haftasıdır. Yılın gününü hesaplamada kullanılır.
%w Hafta içi [ 0 -6]. Pazar 0.
%W Yılın hafta sayısı [ 0-53]. Pazartesi haftanın ilk günüdür. Yılın gününü hesaplamada kullanılır.
%x Yerel ayar biçimindeki tarih.
%X Yerel ayar biçimindeki saat.
%y 2 basamaklı yıl [ 0-99].
%Y 4 basamaklı yıl. Negatif olabilir.
%z UTC farkı. Çıkış, +HHMM ya da -HHMMbiçimindeki bir dizedir; burada +, GMT 'nin doğusunu,-GMT' nin batısını, SS GMT 'den saat sayısını ve MM, GMT' den dakika sayısını gösterir.
%Z Saat dilimi adı.
%% % karakteri.

Değiştirilen Dönüştürme Belirticileri

Bazı dönüştürme belirticileri, alternatif bir biçim ya da belirtim kullanılması gerektiğini belirtmek için E ya da O değiştirici karakterleri tarafından değiştirilebilir. Değiştirilen bir dönüştürme belirticisi, geçerli yerel ayarda kullanılamayan bir alan kullanıyorsa, davranış, değiştirilmemiş dönüştürme belirtimi kullanılmış gibi olur. Örneğin, era dizgisi boş "" dizgisiyse, bu, era ' nın kullanılamadığı anlamına geliyorsa, %EY %Y, %Y gibi davranır.

Belirleyici Anlamı
%Ec Geçerli dönemin tarihi/saati.
%EC Dönem adı.
%Ex Geçerli döneme ilişkin tarih.
%EX Geçerli dönemin zamanı.
%Ey Dönem yılı. Bu, temel yıla göre bir farktır.
%EY Şu anki dönemin yılı.
%Od Alternatif rakamları kullanan ayın günü.
%Oe %Od ile aynı.
%OH Alternatif rakamlar kullanılarak 24 saat biçiminde saat.
%OI Alternatif rakamlar kullanılarak 12 saatlik biçimde saat.
%Om Alternatif basamakları kullanan ay.
%OM Alternatif rakamlar kullanılarak dakika sayısı.
%OS Diğer basamakları kullanan saniye sayısı.
%u Alternatif rakamları kullanan haftanın günü. Pazartesi 1, Pazar 7.
%Kuruluş Birimi Alternatif rakamlar kullanılarak yılın hafta sayısı. Pazar haftanın ilk günüdür.
%OV Alternatif rakamlar kullanılarak yılın ISO hafta sayısı. ISO hafta numarasının açıklaması için bkz. %V.
%ov Alternatif rakam kullanılarak hafta içi gün. Pazar 0, Cumartesi 6.
%OW Alternatif rakamlar kullanılarak yılın hafta sayısı. Pazartesi haftanın ilk günüdür.
%Oy Alternatif rakamlar kullanılarak 2 basamaklı yıl.
%OZ Kısaltılmış saat dilimi adı.

Dönüş Değeri

İşlem hatasız olarak tamamlandığında, strptime() işlevi, ayrıştırılan son karakteri izleyen karaktere bir gösterge döndürür. Tersi durumda, boş değerli bir gösterge döndürülür. errno değeri ECONVERT (dönüştürme hatası) olarak ayarlanabilir.

Örnek

#include <stdio.h>
#include <locale.h>
#include <time.h>

int main(void)
{
    char buf[100];
    time_t t;
    struct tm *timeptr,result;

    setlocale(LC_ALL,"/QSYS.LIB/EN_US.LOCALE");
    t = time(NULL);
    timeptr = localtime(&t);
    strftime(buf,sizeof(buf), "%a %m/%d/%Y %r", timeptr);

    if (strptime(buf, "%a %m/%d/%Y %r",&result) == NULL)
          printf("\nstrptime failed\n");
    else
    {
          printf("tm_hour:  %d\n",result.tm_hour);
          printf("tm_min:  %d\n",result.tm_min);
          printf("tm_sec:  %d\n",result.tm_sec);
          printf("tm_mon:  %d\n",result.tm_mon);
          printf("tm_mday:  %d\n",result.tm_mday);
          printf("tm_year:  %d\n",result.tm_year);
          printf("tm_yday:  %d\n",result.tm_yday);
          printf("tm_wday:  %d\n",result.tm_wday);
    }
 
    return 0;
}

/************************************************************
     The output should be similar to:
     Tue 10/30/2001 10:59:10 AM
     tm_hour:  10
     tm_min:  59
     tm_sec:  10
     tm_mon:  9
     tm_mday:  30
     tm_year:  101
     tm_yday:  302
     tm_wday:  2
************************************************************/

İlgili Bilgiler