2015-01-21 24 views
6

System.Locale numaralı telefondaki defaultTimeLocale sabitine ilk kez rastladığımda, geçerli yerel ayar için varsayılan TimeLocale değerini içermesi gerekiyordu.Geçerli yerel ayar için tarih biçimi alma

Biraz uğraştıktan sonra, her zaman aynı sabitleri içerdiğini ve System.Locale kaynak koduna bakarak bunun sadece bir sabit olduğunu hemen farkettiğini fark ettim. (Daha sonra türü de bana söyler fark etti. defaultTimeLocale bir IO değer değildir ve sabit olması sahip herhangi bir bağımsız değişken almaz beri.)

akımını almak için Haskell yolu nedir Mevcut bölge ile ilgili TimeLocale? paketin current-locale den

cevap

1
System.CurrentLocale.currentLocale :: IO TimeLocale 

uygun görünüyor.

Test etmedim. Kaynak koduna bakarak çalışmalıdır. Altından bu yana pek de hoşlanmıyorum çünkü bu basit görev olan IMHO için oldukça fazla olan dörtdate alt işlemcisini (!) Doğurur.

Muhtemelen, bunun yerine bazı C veya POSIX işlevlerini kullanmak için yeniden yazılabilir.

+1

Yumurtlama tarihi işlemleriyle ilgili sorun daha da kötüdür, çünkü yalnızca GNU tarih sürümüyle çalıştığı görülmektedir. (o mac üzerinde başarısız) – Kritzefitz

+1

@Kritzefitz Gerçekten, yeniden yazılması gerekiyor. İlgili C bağlaçlarını (muhtemelen tek bir işlev) yazmayı deneyebilir veya başka bir paketin daha iyi bir yer işaretine sahip olup olmadığına bakabilirsiniz - yine de hiçbir şey bulamadım. – chi

+0

Peki, C'nin şu anki yerel ortama göre biçimlendiren biçiminde "% D" biçiminde "strftime" olduğunu gördüm. haskells 'format', aynı format öğesine sahiptir, ancak tarihi" TImeLocale' "e göre biçimlendirir. Mevcut formatı elde etmek için C işlevi bulamadım. – Kritzefitz