Zaman Değerlerinin Biçimlenmesi
Önceki Mutlak Zaman Sonraki
Zaman Değerlerinin Biçimlenmesi
Bu bölümdeki mutlak zaman değerlerini dizgeler dönüştürerek biçimlendirmekte kullanılan işlevlerden bahsedilecektir. Bu işlevler time.h başlık dosyasında bildirilmiştir.
char *asctime
(const struct tm *yerelzaman)
işlev
asctime işlevi yerelzaman ile gösterilen yerel zaman değerini
"Sat Aug 28 13:49:43 2004\n"
standart biçimine dönüştürür. Bu işlevde kullanılan gün isimlerinin kısaltmaları: Sun, Mon, Tue, Wed, Thu, Fri ve Sat.
Ay isimlerinin kısaltmaları: Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov ve Dec.
Dönüş değeri bir durağan ayrılmış dizgeye göstericidir ve bu değer sonraki asctime veya ctime işlevleri ile değiştirilebilir. (Kütüphanede bu değeri değiştiren başka işlev yoktur.)
char *asctime_r
(const struct tm *yerelzaman,
 char            *tampon)
işlev
Bu işlev asctime işlevine benzemekle birlikte, sonucu bir durağan ayrılmış tampona değil, tampon ile gösterilen tampona yazar. Bu tampon sonlandırıcı boş karakter dahil en az 26 baytlık bir yere sahip olmalıdır.
Bir hata oluşmazsa işlev sonucun yazıldığı tampona bir gösterici ile yani tampon ile döner. Aksi takdirde NULL döner.
char *ctime
(const time_t *zaman)
işlev
ctime işlevi argüman olarak bir yerel zaman değeri yerine basit zaman değeri alması dışında asctime işlevi gibidir.
asctime (localtime (zaman))
ile eşdeğerdir. localtime işlevi tzname değerini atadığından ctime işlevi de aynısını yapar. Bkz. Zaman Dilimi Değişkenleri ve İşlevleri.
char *ctime_r
(const time_t *zaman,
 char         *tampon)
işlev
Bu işlev ctime işlevine benzemekle birlikte, sonucu bir durağan ayrılmış tampona değil, tampon ile gösterilen tampona yazar.
({ struct tm tm; asctime_r (localtime_r (time, &tm), buf); })
ile eşdeğerdir (GCC oluşumları kullanılarak yazılmıştır). Bir hata oluşmazsa işlev sonucun yazıldığı tampona bir gösterici ile yani tampon ile döner. Aksi takdirde NULL döner.
size_t strftime
(char            *dizge,
 size_t           boyut,
 const char      *şablon,
 const struct tm *yerelzaman)
işlev
Bu işlev sprintf işlevine benzer (bkz. Biçimli Girdi), fakat yerelzaman içindeki tarih ve saatin basılması için şablon biçim dizgesi o an belirtilmiş olan yerele özgü zaman dönüşümlerinin yapılabilmesi için özelleştirilmiştir.
şablon dizgesindeki belirteç olmayan karakterler dizge çıktı dizgesine oldukları gibi kopyalanırlar; Bu dizge çokbaytlı karakterleri de içerebilir. Dönüşüm belirteçleri bir % karakteri ile başlar ve bunu isteğe bağlı bir seçenek izler. Bu seçeneklerin hepsi GNU oluşumudur. İlk üçü sadece sayıların çıktılanması ile ilgilidir:
_
Sayılar için ayrılan genişlikteki boş yerler boşlukla doldurulur.
-
Sayılar için ayrılan genişlikteki boş yerler hiçbir şeyle doldurulmaz.
0
Sayılar için ayrılan genişlikteki boş yerlerin boşlukla doldurulması belirtilmiş olsa bile sıfırlarla doldurulur.
^
Çıktıda büyük harfler kullanılır, fakat bu sadece mümkün olabiliyorsa yapılır (Bkz. Büyük-Küçük Harf Dönüşümleri).
Öntanımlı eylem sayılar için ayrılan genişliğin sıfırlarla doldurulmasıdır. Bir aralık dahilinde değişmeyen, dolayısıyla doğal bir genişliği olmayan sayılar için dolgu yapılmaz.
Bundan sonra, genişlik belirtilmeyi mümkün kılan isteğe bağlı bir genişlik belirtimi gelir. Bu ondalık sayı gösterimi belirtir. Çıktılanan sayının karakter sayısı belirtilen genişlikten azsa sonuç sağa yanaştırılarak yazılırken soldaki alan boşluklarla doldurulur.
Seçenek ve genişlik belirtiminden sonra isteğe bağlı bir değiştirici gelebilir. Değiştiriciler ilk olarak, POSIX.2-1992 ve ISO C99 standartları ile standartlaştırılmıştır:
E
Tarih ve saat gösterimi için yerele özgü diğer gösterim kullanılır. Bu değiştirici %c, %C, %x, %X, %y ve %Y biçim belirteçlerine uygulanır. Japon yerelinde örneğin, %Ex Japon İmparator'unun hüküm sürdüğü çağa göre biçimlenmiş tarih olabilir.
O
Sayılar için yerele özgü diğer sayısal semboller kullanılır. Bu değiştirici sadece sayısal biçim belirteçlerine uygulanır.
Biçimde değiştirici desteği varsa ama yerelde diğer bir gösterim yoksa değiştirici yoksayılır.
Dönüşüm belirteçleri biçim belirteçlerinden biri ile biter. Aşağıda % ile başlayan belirtimler ve çıktı dizgesinde nasıl yorumlandıkları liste halinde verilmiştir:
%a
Yerele özgü kısaltılmış gün ismi.
%A
Yerele özgü gün ismi.
%b
Yerele özgü kısaltılmış ay ismi.
%B
Yerele özgü ay ismi.
%B'nin %d ile birlikte kullanımı bazı yerellerde imla kurallarına uygun olmayan sonuçlar üretir.
%c
Yerele özgü tarih ve saat gösterimi.
%C
Yılın yüzyılllık tam parçası (yüzyıl değeri değil). Yılın 100'e bölünmesi ile elde edilen sonucun tamsayı kısmıdır.
Bu biçim ilk olarak POSIX.2-1992 ve ISO C99 tarafından standartlaştırılmıştır.
%d
01 ile 31 arasında bir değer olarak ayın gün numarası.
%D
%m/%d/%y biçiminde tarih.
Bu biçim ilk olarak POSIX.2-1992 ve ISO C99 tarafından standartlaştırılmıştır.
%e
1 ile 31 arasında bir değer olarak ayın gün numarası (tek rakamlı sayıların önüne 0 konmaz).
Bu biçim ilk olarak POSIX.2-1992 ve ISO C99 tarafından standartlaştırılmıştır.
%F
%Y-%m-%d biçimimde tarih. Bu biçim ISO 8601 standardında belirtilmiştir ve çok tercih edilen bir biçimdir.
Bu biçim ilk olarak POSIX.2-1992 ve ISO C99 tarafından standartlaştırılmıştır.
%g
00 ile 99 arasında yılın yüzyıllık parçası olmaksızın yıl numarasıdır (örneğin, 1999 için 99, 2004 için 04). %y ile aynı biçim ve değerdedir, ancak ilk ve son ISO hafta numarası (bakınız %V) önceki ya da sonraki hangi yıla karşılıksa o yıla karşılık olan değer gösterilir.
Bu biçim ilk olarak POSIX.2-1992 ve ISO C99 tarafından standartlaştırılmıştır.
%G
%Y ile aynı biçim ve değerdedir, ancak ilk ve son ISO hafta numarası (bakınız %V) önceki ya da sonraki hangi yıla karşılıksa o yıla karşılık olan değer gösterilir.
Bu biçim ilk olarak POSIX.2-1992 ve ISO C99 tarafından standartlaştırılmıştır. Fakat bir GNU oluşumu olarak evvelce de vardı.
%h
%b ile aynıdır ve yerele özgü kısaltılmış ay ismidir.
Bu biçim ilk olarak POSIX.2-1992 ve ISO C99 tarafından standartlaştırılmıştır.
%H
00 ile 23 arasında bir sayısal değer olarak 24 saatlik saat gösterimi.
%I
01 ile 12 arasında bir sayısal değer olarak 12 saatlik saat gösterimi.
%j
001 ile 366 arasında yılın gün numarası.
%k
0 ile 23 arasında bir sayısal değer olarak 24 saatlik saat gösterimi (tek rakamlı sayıların önüne 0 konmaz).
Bu biçim bir GNU oluşumudur.
%l
1 ile 12 arasında bir sayısal değer olarak 12 saatlik saat gösterimi (tek rakamlı sayıların önüne 0 konmaz).
Bu biçim bir GNU oluşumudur.
%m
01 ile 12 arasında ayın numarası.
%M
00 ile 59 arasında dakika değeri.
%n
Tek bir \n (satırsonu) karakteri.
Bu biçim ilk olarak POSIX.2-1992 ve ISO C99 tarafından standartlaştırılmıştır.
%p
Verilen değere bağlı olarak yerele özgü AM veya PM dizgesidir. Öğleden önceki saatler için AM ile öğleden sonraki saatler için PM karşılığı olan yerele özgü dizge basılır. Bu dizgeleri desteklemeyen yerellerde "%p" bir boş dizgeye karşılıktır.
%P
Verilen değere bağlı olarak yerele özgü am veya pm dizgesidir. Öğleden önceki saatler için am ile öğleden sonraki saatler için pm karşılığı olan yerele özgü dizge basılır. Bu dizgeleri desteklemeyen yerellerde "%p" bir boş dizgeye karşılıktır.
Bu biçim bir GNU oluşumudur.
%r
Yerele özgü AM/PM biçimli saat gösterimi (örn, 04:38:53 ÖS)
Bu biçim ilk olarak POSIX.2-1992 ve ISO C99 tarafından standartlaştırılmıştır. POSIX yerelinde, bu biçim %I:%M:%S %p biçim dizgesine eşdeğerdir.
%R
%H:%M biçiminde saat ve dakika.
Bu biçim ilk olarak POSIX.2-1992 ve ISO C99 tarafından standartlaştırılmıştır. Fakat bir GNU oluşumu olarak evvelce de vardı.
%s
Mutlak zaman başlangıcından (epoch) yani 1970-01-01 00:00:00 UTC'den beri geçen saniye sayısı. Artık saniye desteği yoksa artık saniyeler hesaba katılmaz.
Bu biçim bir GNU oluşumudur.
%S
00 ile 60 arasında saniye.
%t
Tek bir \t (sekme) karateri.
Bu biçim ilk olarak POSIX.2-1992 ve ISO C99 tarafından standartlaştırılmıştır.
%T
%H:%M:%S biçiminde saat.
Bu biçim ilk olarak POSIX.2-1992 ve ISO C99 tarafından standartlaştırılmıştır.
%u
1 ile 7 arasında haftadaki günün numarası. Pazartesi, haftanın birinci günüdür.
Bu biçim ilk olarak POSIX.2-1992 ve ISO C99 tarafından standartlaştırılmıştır.
%U
00 ile 53 arasında hafta numarası. Yılın ilk Pazar günü ile başlayan hafta yılın ilk haftası sayılır ve 00 ile gösterilir.
%V
01 ile 53 arasında ISO 8601:1988 hafta numarası. ISO haftaları Pazartesi günü başlar, Pazar günü biter. Yılın 01. haftası, günlerinin çoğunluğu yeni yıl içinde kalan ilk haftadır; örneğin, yılın ilk günü Perşembe ve son günü 4 Ocak olan hafta 01. haftadır (7 günden 4'ü yeni yıl içinde). Yani, yılın 01. haftası bir önceki yıldan da günler içerebileceği gibi bunun tersine 01. haftadan önceki hafta yeni yıldan bir kaç gün içerse bile yılın son haftası (52. veya 53. hafta) olabilir.
Bu biçim ilk olarak POSIX.2-1992 ve ISO C99 tarafından standartlaştırılmıştır.
%w
0 ile 6 arasında haftadaki günün numarası. Pazar, haftanın sıfırıncı günüdür.
%W
00 ile 53 arasında hafta numarası. Yılın ilk Pazartesi günü ile başlayan hafta yılın ilk haftası sayılır ve 00 ile gösterilir.
%x
Yerele özgü kısa tarih gösterimi.
%X
Yerele özgü saat gösterimi.
%y
00 ile 99 arasında yılın yüzyıllık parçası olmaksızın yıl numarasıdır (örneğin, 1999 için 99, 2004 için 04).
%Y
Gregoryen takvimine göre yıl. 1. yıldan önceki yıllar 0, -1, -2 diye gider.
%z
RFC 822/ISO 8601:1988 tarzı zaman dilimi (örn, +0300 veya -0600); zaman dilimi saptanamazsa hiçbir şey basılmaz.
Bu biçim ilk olarak POSIX.2-1992 ve ISO C99 tarafından standartlaştırılmıştır. Fakat bir GNU oluşumu olarak evvelce de vardı.
POSIX yerelinde, bir RFC 822 tam tarih ve saat "%a, %d %b %Y %H:%M:%S %z" (veya "%a, %d %b %Y %T %z" eşdeğeri) biçimindedir.
%Z
Zaman dilimi kısaltması (örn, EEST); saptanamazsa boş dizge.
%%
Tek bir % karakteri.
boyut parametresi dizge dizisi içinde sonlandırıcı boş karakter dahil saklanabilecek karakterlerin sayısı kadar ya da daha büyük olmalıdır. Biçimlenen zaman dizgesi boyut karakterden fazla ise strftime sıfır ile döner ve dizge dizisi tanımsız bırakılır. Aksi takdirde işlev dizge dizisine yerleştirilen karakter sayısı ile döner, bu sayıya sonlandırıcı boş karakter dahil değildir.
Uyarı
Dönüş değeri için ISO C'de açıklanan bu uzlaşım bazı durumlarda sorunlara yol açabilir. Bazı yerellerde bazı biçim dizgeleri gerçekten de boş dizge çıktılar ve bu durum dönüş değerine bakarak saptanamaz. Örneğin çoğu yerel AM/PM biçimini kullanmaz (çoğu ülkede 24 saatlik biçim kullanılır) ve bu yerellerde boş dizge çıktılanır, bu durumda işlevin dönüş değeri sıfır olur. Buna benzer bir durumu saptamak için şöyle bir kod kullanılmalıdır:
buf[0] = '\1';
len = strftime (buf, bufsize, format, tp);
if (len == 0 && buf[0] != '\0')
  {
    /* strftime çağrısında birşeyler yanlış gitmiş.  */
    ...
  }
dizge bir boş gösterici ise, strftime hiçbir yazma işlemi yapmaz, ama dizge'ye yazılmış gibi karakterlerin sayısı ile döner.
POSIX.1 gereğince her strftime çağrısı bir tzset çağrısına sebep olur. Bu durumda, herhangi bir çıktı üretilmeden önce TZ ortam değişkeninin içeriği incelenebilir.
Bir strftime örneği Zaman İşlevleri Örneği bölümünde verilmiştir.
size_t wcsftime
(wchar_t         *dizge,
 size_t           boyut,
 const wchar_t   *şablon,
 const struct tm *yerelzaman)
işlev
wcsftime işlevi geniş karakter dizgeleriyle çalışması dışında strftime işleviyle aynıdır. Sonucun saklandığı dizge bir geniş karakter dizisi olmalıdır. boyut parametresi ile bayt sayısı değil, geniş karakter sayısı belirtilir.
Ayrıca şablon biçim dizgesi de bir geniş karakterli dizgedir. Biçim dizgesindeki tüm karakterlerin temel karakter kümesindeki karakterler olması gerektiğinden taşınabilirlik açısından C kaynak kodunda biçim dizgesi L"…" sözdizimi ile yazılmalıdır. yerelzaman parametresi strftime çağrısındaki ile aynı anlamdadır.
wcsftime işlevi strftime işlevinin desteklediği tüm seçenekleri, değiştiricileri ve biçim belirteçlerini destekler.
wcsftime işlevinin dönüş değeri dizge dizisine saklanan geniş karakterlerin sayısıdır. dizge çıktılanacak karakterler bakımından yetersizse işlev sıfır ile döner, ayrıca strftime işlevinin açıklamasında bahsedilen sorunlar burada da geçerlidir.
Önceki Üst Ana Başlık Sonraki
Yüksek Doğrulukta Saat Başlangıç Tarih ve Saatin Yerel Zamana Dönüştürülmesi
Bir Linux Kitaplığı Sayfası