Thread overview
Tarih biçimi düzenleme
Mar 25, 2016
zafer
Apr 02, 2016
zafer
March 25, 2016

Merhaba,

Vibe.d ile çalışırken BsonDate (http://vibed.org/api/vibe.data.bson/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");
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

March 28, 2016

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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

April 02, 2016

Teşekkürler.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]