2017-05-04 791 views
0

我试图从欧洲的日期格式更改为美国(YYYY-MM-DD HH:MM:SS),所以据我所知这应该工作:欧洲和美国之间的转换与+0000日期上月底

  var dateString = array[4]; 
      var date = DateTime.ParseExact(dateString, "dd/MMM/yyyy:HH:mm:ss", CultureInfo.InvariantCulture); 
      var newDateString = date.ToString("yyyy-MM-dd HH:mm:ss"); 

      //inserting the new date and time into the array 
      array[4] = newDateString; 

输入:14/Dec/2014:15:25:34

但是,如果我看到新的文件输出的格式如下:

14/12/2014 15:25:34 

编辑::从这一行我的代码来的错误:

writer.WriteLine(string.Join(",", array.Where(s => !string.IsNullOrEmpty(s)))) 

当更改为'string.Join(“,”...“格式正确。

+0

调试器使用您的本地文化首选项将DateTime变量转换为字符串。你知道它确实工作正常,14不是有效的月份。你没有真正的问题。 –

+0

@HansPassant它不能正常工作..正常工作会给我一个格式为'yyyy-MM-dd HH:mm:ss'的日期输出?或者我错过了什么..? – johnfish92

+1

你的代码工作得很好。调试它,并在'newDateString'中获得'2014-12-14 15:25:34'。所以问题一定是,如果我明白你在做什么,什么时候你把它写在一个新文件中 – Pikoh

回答

0

使用zzz为UTC偏移格式说明

var dateString = "24/Oct/2014:13:52:12 +0100"; 
var date = DateTime.ParseExact(dateString, "dd/MMM/yyyy:HH:mm:ss zzz", CultureInfo.InvariantCulture); 
var newDateString = date.ToString("yyyy-MM-dd HH:mm:ss"); 

然而,时区的敏感信息,你或许应该DateTimeOffset工作,它为您提供了不同的时区的控制。

如果你要处理多种格式,但仍想使用准确的分析,使用接受的格式排列的过载(和的DateTimeOffset如前所述):

DateTimeOffset.ParseExact(dateString, new[] { "dd/MMM/yyyy:HH:mm:ss zzz", "dd/MMM/yyyy:HH:mm:ss" }, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal); 
+0

如果我更改我的代码,它会抛出一个错误,基本上说这个格式不是dateString持有的。在调试器上,它实际上显示日期/时间格式为:“14/Dec/2014:15:25:34”。但是,当传递到newDateString时,它仍然给出了问题中看到的格式。任何想法为什么?我的格式化newDateString的代码中有错误吗? – johnfish92

+0

请具体说明......是否包含UTC偏移量的字符串?''“14/Dec/2014:15:25:34”'不适用于'zzz',但'“24/Oct/2014:13:52:12 +0100”'。 – grek40

+0

在查看调试器时,我注意到'+0100'出于某种原因没有存储在dateString中,但是我仍然有一种轻微的感觉,它停止了正确的格式,因为我用我的代码编辑了这个问题,并且看不出为什么或者哪里不正确? – johnfish92

0

你有你的格式字符串更改为

"dd/MMM/yyyy:HH:mm:ss K" 

用于使用UTC格式。

查看MSDN了解更多信息。 您可以使用

"dd/MMM/yyyy:HH:mm:ss zzz" 

以及。

相关问题