2013-07-08 108 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(); 
     } 
    } 
} 

我已将系统日期格式更改为Faeroese。

和我得到的输出作为

23-12-2013

我应该如何得到输出?

23/12/2013

而且认为这另一种情况,假设 ,我有一个Customculture信息,我想转换我约会WRT我的风俗文化, 我一直在这样做之前如下,

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

现在我应该怎么得到datetime在字符串中使用customCulture,它不应该依赖于系统日期时间?

+0

试试这个http://stackoverflow.com/questions/6362088/c-sharp-date-formatting - 丢失 - 斜杠分隔符 – 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/自身替换它。

您应该在result.ToString()方法中使用CultureInfo.InvariantCulture作为第二个参数。

获取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

@SonerGö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) 

好运

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

我完全同意Tim Schmelter的评论和SonerGönül的回答。只是想补充说,当你使用日期时间格式时,你应该指定文化,因为默认文化将从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")