Windows Server 2012 / IIS 8.0 uygulamalarında tarih formatının "d.M.yyyy" olarak değişmiş olması
Merhaba Arkadaşlar,
Varsayılan tarih formatı “Windows Server 2012” üzerinde, “Windows Server 2008 R2” den farklı olduğu için, IIS uygulamalarınızı IIS 8.0 üzerine taşırken, uygulamanızda kullanmakta olduğunuz tarih formatlarında değişiklik olduğunu farketmiş olabilirsiniz.
Bunu en basitinden aşağıdaki “aspx” kodunu kullanarak test edebilirsiniz. Bu kod “System.DateTime.Now” çıktısını ekrana dökecektir:
<%@ Page %>
<script language="C#" runat="server">
private void Page_Load(object sender, System.EventArgs e)
{ Response.Write("Default: " + System.DateTime.Now + "<br>");
Response.Write("Local Time: " + System.DateTime.Now.ToLocalTime() + "<br>");
Response.Write("Short Date: " + System.DateTime.Now.ToShortDateString() + "<br>");
Response.Write("ToString Default: " + System.DateTime.Now.ToString() + "<br>");
Response.Write("Universal Time: " + System.DateTime.Now.ToUniversalTime() + "<br>");
Response.Write("d - Short Date: " + System.DateTime.Now.ToString("d") + "<br>");
Response.Write("g - General: " + System.DateTime.Now.ToString("g") + "<br>");
Response.Write("Culture : " +System.Threading.Thread.CurrentThread.CurrentCulture.ToString()+ "<br>");
}
</script>
Bu çıktı IIS 8.0 (Windows Server 2012) üzerinde aşağıdaki şekilde iken:
Aynı çıktı örneğin IIS 7.5 üzerinde aşağıdaki gibi olacak:
Peki bu farklılık nereden geliyor?
Bu farklılığın nedeni daha önce belirttiğim gibi “2012 Server” için varsayılan "Short Date" formatı "d.M.yyyy" iken bu format 2008 R2 de "dd.MM.yyyy" şeklinde. Yani registrydeki “sShortDate” bilgisi 2008 R2 ve 2012 Server’da birbirinden farklı. “Control Panel” üzerinden aşağıdaki ekrandan format bilgileri değiştirilebilmekte:
Fakat bu değişiklik sadece “Current User” için etkili oluyor ve “HKCU\Control Panel\International\sShortDate” parametresini değiştiriyor. Denediğim kadarı ile burada yaptığım değişiklik, “application pool” kullanıcısı farklı bir kullanıcı olduğu için etkili olmamakta.
Format bilgileri tüm kullanıcılar için “registry” içerisinde “HKEY_USERS” klasörü içerisinde tutuluyor. Bu klasör içerisinde alt klasörlerde “SID” ("Security Identifier") bazında ayarlar tutulmakta. Aşağıdaki makalede bilinen “SID” numaraları mevcut:
https://support.microsoft.com/kb/243330
Örneğin “S-1-5-18” SID'i "Local System" kullanıcına yada “S-1-5-19” Local Service kullanıcına ait. “S-1-5-21XXXXX” şeklinde olanlar ise administrator yetkili kullanıcılar.
Buradan yola çıkarak eğer örneğin application pool, Local System kullanıcısı ile çalışıyorsa registry de değiştirmemiz gereken yer “HKEY_USERS\S-1-5-18\Control Panel\International” altındaki “sShortDate” değeri olmalı:
Yukarıdaki gibi “sShortDate” değerini dilediğimiz gibi düzenledikten sonra process’in “culture” değerinin yukarıdaki registry’deki “LocaleName” değeri ile aynı olup olmadığını kontrol etmeliyiz. Yani process yukarıdaki örnek için “tr-TR” “culture” ayarında çalışıyor olmalı.. "Web.config" içerisinden culture ayarını aşağıdaki gibi enforse edebiliriz:
<system.web> <globalization culture="tr-TR" uiCulture="tr-TR"/> </system.web>
Doğru culture değerini kullanıp kullanmadığımızı anlamak için ise önceki "aspx scipt"inde belirttiğim aşağıdaki kısmı kullanabiliriz.
Response.Write("UI Culture : " +System.Threading.Thread.CurrentThread.CurrentUICulture.ToString()+ "<br>");
Response.Write("Culture : " +System.Threading.Thread.CurrentThread.CurrentCulture.ToString()+ "<br>");
Son olarak eğer localSystem değilde ApplicationPoolIdentity ile IIS process’i çalışıyorsa ne yapmalıyız diye sorarsanız, benim denemelerimde "built-in Application pool identity" kullacısına ait ayarlar aşağıda gösterdiğim SID altında idi:
Yani en iyisi tüm SID ler içinde “Short date” formatını dilediğiniz gibi değiştirmek. Bu değişikliği yapmanın başka yöntemleri de olabileceğini belirtmek isterim, ama ben daha hızlı olması açısından "registry" ayarları ile oynayarak bu değişikliklerin nasıl yapılabileceğini anlatmaya çalıştım. Yapacağınız registry değişikliklerinden önce ilgili "registry" klasörlerinin bir yedeğini almayı unutmayın.
Teşekkürler,
İyi çalışmalar,
Mert Öztürk
Comments
Anonymous
April 24, 2014
Tüm hepsini yapmama rağmen bir sonuç alamadım. Çözümü bulursam buradan paylaşırım.Anonymous
April 25, 2014
Yaklaşık 2 haftadır çözmeye çalıştığım bir sorundu. IIS ve bölge dil seçenekleri arasında mekik dokudum. Sonunda makaleniz ile sorunu çözdüm. Makaleniz için teşekkür ederiz. Gerçekten işe yarayan bir makale.Anonymous
November 01, 2015
teşekkür ediyorum... bu sorun başımı ağrıtmıştı tüm uygulamada içinde tarih saat alanları için fonksiyon yazmak zorunda kalmıştım...