2013-07-08 19 views
8

Chcę przekonwertować DateTime na String.Konwertowanie DateTime na ciąg znaków

sprawdź poniższy kod.

namespace TestDateConvertion 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      object value = new DateTime(2003,12,23,6,22,30); 
      DateTime result = (DateTime)value; 
      Console.WriteLine(result.ToString("dd/MM/yyyy")); 
      Console.ReadLine(); 
     } 
    } 
} 

Zmieniłem mój format daty systemowej na Faeroese.

i jestem coraz wyjście jako

23-12-2013

Jak powinienem dostać jako wyjście?

23/12/2013

I uznają to inny scenariusz, przypuszczać, mam Customculture informacji, i chcę, aby przekonwertować datę WRT mój własny kulturę, co robiłem wcześniej był następujący,

string.Format(customCulture, "{0:G}", result); 

teraz, w jaki sposób uzyskać datetime w ciąg za pomocą customCulture i nie powinno zależeć od systemu DateTime?

+0

Try This http://stackoverflow.com/questions/6362088/c-sharp-date-formatting -is-lose-slash-separators – MEYWD

+0

Console.WriteLine (DateTime.Now.ToString ("ddd M/dd/yy", CultureInfo.InvariantCulture)); Console.ReadLine(); z http://stackoverflow.com/questions/6362088/c-sharp-date-formatting-is-losing-slash-separators –

+5

'/' ma specjalne znaczenie "zastąp mnie separatorem daty aktualnej kultury". Możesz go wymusić przekazując "CultureInfo.InvariantCulture" jako drugi parametr. –

Odpowiedz

13

Wygląda separator daty swojej kultury jest - i jak Tim pointed, / zamienia się z nim.

Powinieneś użyć CultureInfo.InvariantCulture jako drugiego parametru w swojej metodzie result.ToString().

Pobiera CultureInfo obiektu, który jest niezależny od kultury (niezmienna).

object value = new DateTime(2003, 12, 23, 6, 22, 30); 
DateTime result = (DateTime)value; 
Console.WriteLine(result.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture)); 

wyjściowa będzie;

23/12/2003 

Tutaj DEMO.

+2

Fajnie, nie wiedziałem o [ideone] (http://ideone.com/0ZU9Wg) – surfmuggle

+1

@Soner Gönül, dziękuję za wprowadzenie do http://ideone.com/ – Satpal

+0

@threeFourOneSixOneThree i Satpal, serdecznie zapraszamy. Ideone jest naprawdę świetnym narzędziem do publikowania przykładów kodu na Stackoverflow. –

3

Spróbuj ten

Console.WriteLine(DateTime.Now.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture)); 
+0

Jeśli twój format, wszystkie specyfikatory są błędne. 'ddd' to na przykład skrócone nazwy. –

+0

@ SonerGönül oczywiście, moje złe, edytowane :) dzięki! – wudzik

0

Można użyć kultury niezmienny:

Console.WriteLine(
    result.ToString("dd/MM/yyyy", 
    System.Globalization.CultureInfo.InvariantCulture 
); 
0

spróbować

string.Format("{0:dd/MM/yyyy}",result) 

Powodzenia

Skrzydło

1

Trzeba dodać ten

Console.WriteLine(result.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture)); 

Teraz twój kod staje

object value = new DateTime(2003, 12, 23, 6, 22, 30); 
DateTime result = (DateTime)value; 
Console.WriteLine(result.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture)); 
Console.ReadLine(); 

UWAGA * Dodaj za pomocą System.Globalization; *

0

Całkowicie zgadzam się z komentarzem Tima Schmeltera i odpowiedzią Sonera Gönüla. Chciałem tylko dodać, że jeśli używasz formatu Date Time, powinieneś podać kulturę, ponieważ domyślnie kultura będzie dostępna od Thread.CurrentThread.CurrentCulture (kultura ustawiona w Control Panel->Region and Languages->Format), co oznacza, że ​​przy różnych ustawieniach twoje wejście będzie inne.

Spójrz na swoim przykładzie z różnych kultur:

object value = new DateTime(2003, 12, 23, 6, 22, 30); 
DateTime result = (DateTime)value; 
foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures)) 
{ 
     Console.WriteLine(result.ToString("dd/MM/yyyy", culture));  
} 
0

„/” jest specjalny znak, który oznacza „Ustawienia regionalne separator daty”. jeśli chcesz używać go jak normalnego char można zacytować go za pomocą wykresu Quoter „\” Przykład:

DateTime.Now.ToString(@"dd\/MM\/yyyy") 
Powiązane problemy