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