2013-07-08 4 views
8

Я хочу преобразовать DateTime в String.Преобразование DateTime в строку

проверьте приведенный ниже код.

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(); 
     } 
    } 
} 

Я изменил формат своей системы на фарерский.

и я получаю результат, как

23-12-2013

Как я должен получить результат, как?

23/12/2013

И считают это другой сценарий, предположим, у меня есть Customculture информация, и я хочу, чтобы преобразовать дату моего WRT свою кодовую культуру, то, что я делал до того был следующим,

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

теперь, как должен я получить DateTime в строку, используя customCulture и она не должна зависеть от системы DateTime?

+0

попробовать это http://stackoverflow.com/questions/6362088/c-sharp-date-formatting -is-loss-slash-separators – MEYWD

+0

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

+5

'/' имеет особое значение «замените меня на разделитель дат текущей культуры». Вы можете принудительно выполнить его с передачей 'CultureInfo.InvariantCulture' в качестве второго параметра. –

ответ

13

Похоже разделителя даты вашей культуры является - и, как Тим pointed, / заменяет себя с ним.

Вы должны использовать CultureInfo.InvariantCulture в качестве второго параметра в вашем методе result.ToString().

Получает объект CultureInfo, который культуры независимого (инвариантное).

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

выход будет;

23/12/2003 

Здесь DEMO.

+2

Прохладный, я не знал о [ideone] (http://ideone.com/0ZU9Wg) – surfmuggle

+1

@Soner Gönül, спасибо за ознакомление с http://ideone.com/ – Satpal

+0

@threeFourOneSixOneThree и Satpal, вас приветствуют ребята. Ideone - действительно отличный инструмент для публикации примеров кода в Stackoverflow. –

3

Попробуйте один

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

Если ваш формат, все спецификаторы ошибочны. 'ddd' для сокращенных имен, например .. –

+0

@ SonerGönül, конечно, мой плохой, отредактированный :) спасибо! – wudzik

0

Вы могли бы использовать инвариантную культуру:

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

попробовать

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

Успехов

Wing

1

Вам нужно добавить этот

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

Теперь ваш код становится

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(); 

ПРИМЕЧАНИЕ * Добавить с использованием System.Globalization; *

0

Я полностью согласен с комментарием Тима Шмельтера и ответом Сонера Гюнлюла. Просто хотел добавить, что когда вы используете формат Date Time, вы должны указать культуру, потому что по умолчанию культура будет получать от Thread.CurrentThread.CurrentCulture (культура установлена ​​в Control Panel->Region and Languages->Format), это означает, что с разными настройками ваш вход будет другим.

Посмотрите на вашем примере с различными культурами:

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

«/» это специальный символ, который означает «региональные настройки разделителя даты». если вы хотите использовать его как обычный полукокса вы можете процитировать его, используя Цитатник диаграмму «\» Пример:

DateTime.Now.ToString(@"dd\/MM\/yyyy") 
Смежные вопросы