Forum: D Programlama Dili RSS
Tarih biçimi düzenleme
zafer #1
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Tarih biçimi düzenleme
Merhaba,

Vibe.d ile çalışırken BsonDate tarih tipini kullanıyorum ancak mevcut toString() metodu sadece ISOExtString() formatında  tarih bilgisi döndürüyor. C# tarafında DateTime nesnelerinin toString() metodu içinde tarih biçimini tanımlayabiliyorum. Bu sistemi Vibe.d ile kullanabileceğim bir çözüm geliştirmeye çalışıyorum. Eğer güzel bir şeyler ortaya çıkarsa belki Vibe.d deposuna gönderirim ve ana depoya eklenir.

Şöyle bir şeyler yaptım. Elbette eksik veya hatalarım olabilir, sizlerde bir bakar mısınız?

import std.stdio;
 
import std.datetime;
import std.array;
import std.conv;
 
void main()
{
    SysTime date = SysTime(Date(2016, 3, 5));
 
    writeln("Format: (d.m.y) -> " ~ formatDate("d.m.y", date));
    writeln("Format: (y-m-d) -> " ~ formatDate("y-m-d", date));
    writeln("Format: (d/m/y) -> " ~ formatDate("d/m/y", date));
}
 
string formatDate(string format, SysTime date)
{
    string ret = "";
    int i = 0;
 
    while (i < format.length)
    {
        char ch = format[i];
        switch (ch)
        {
            case 'd':
                ubyte d = date.day;
                ret ~= d < 10 ? "0" ~ to!string(d) : to!string(d);
                break;
 
            case 'm':
                ubyte m = date.month;
                ret ~= m < 10 ? "0" ~ to!string(m) : to!string(m);
                break;
 
            case 'y':
                ret ~= to!string(date.year);
                break;
 
            default:
                ret ~= ch;
        }
        i++;
    }
 
    return ret;
}
unittest
{
    SysTime date = SysTime(Date(2016, 3, 5));
 
    assert(formatDate("d.m.y", date) == "05.03.2016");
    assert(formatDate("y-m-d", date) == "2016-03-05");
    assert(formatDate("d/m/y", date) == "05/03/2016");
    assert(formatDate("y&m&d", date) == "2016&03&05");
    assert(formatDate("m=d=y", date) == "03=05=2016");
}
https://github.com/zafer06 - depo
Bu mesaj zafer tarafından değiştirildi; zaman: 2016-03-25, 09:43.
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Gözüme çarpan bir aksaklık yok. Daha hızlı başka yöntemler araştırılabilir. Örneğin, şu satırdaki ~ işleci yeni bir string oluşturmak ve sonucu tekrar ret'e atamak zorundadır:
                ret ~= d < 10 ? "0" ~ to!string(d) : to!string(d);
Onun yerine yalnızca ~= kullanmak daha hızlı sonuç verebilir (derlemeden yazıyorum):
                if (d < 10) {
                    ret ~= '0'// Bir de dizgi yerine tek karakter
                }
                ret ~= to!string(d)// to!string(d) tekrarından da kurtulmuş olduk 
Ali
zafer #3
Üye Tem 2009 tarihinden beri · 700 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Teşekkürler.
https://github.com/zafer06 - depo
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-19, 00:46:44 (UTC -08:00)