2009-12-09 65 views
1

我有一个24小时格式的DateTime字符串..“2009-12-31T23:59:59”
我想要这种格式..“ 12/31/2009 23:59:59“即:”MM/DD/YYYY HH:MM:SS“

当我尝试将它转换为字符串时,我得到”2009年12月31日11:59: 59 PM“..虽然我可以写一个代码字符串操作 ..它似乎不是一个有效的..此外情况变​​得最糟糕时,我有dateTime值如”2009-1-1T1:19: 15“..这里,由于字符串的长度是变化的,我甚至不能使用substring()和convert.ToInt()来追踪小时和月的值。

我使用Visual Studio 2005,它抛出错误说“无法隐式转换日期时间为字符串”当我写这篇文章的语句: ..
如何自定义日期时间格式或将DateTime转换为所需格式的字符串

result = Convert.ToString(dateValue); 

我简化我的问题: 是否有任何方法转换 “YYYY-MM-DDTHH:MM:SS” 格式 “MM/DD/YYYY HH:MM:SS”。而它必须在Visual Studio 2005年工作..

回答

4

您需要使用ParseExact让它回到日期时间:

string FormatDateTime(string dateString) { 
    DateTime dt = DateTime.ParseExact(dateString, "yyyy-MM-ddTHH:mm:ss", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None); 
    return dt.ToString("MM/dd/yyyy HH:mm:ss"); 
} 

这应该给你正在寻找你想要的输出。通过使用InvariantInfo,它将确保您的系统设置不会替换当前在系统中定义的任何斜线。我想我在评论中看到你有一个“。”。被用作日期分隔符。

http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.dateseparator.aspx http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.invariantinfo.aspx

+0

无需编写ParseExact,只需要给日期格式语句dateVaule.toString(date_format)..就像这样“MM”/'dd'/'yyyy''HH':'mm':'ss'..多数民众赞成足够.........邪恶是正确的.. – 2009-12-09 06:25:00

+0

你是什么意思dateValue?你在原始文章中没有提到这一点。你真的需要学习如何提问。 你可能没有意识到,但是如果你让纯粹的Parse尝试并找出日期格式,则需要比提供它更长的时间,从而在解析器中进行初始化。这就是为什么有两种不同的方法。第二个邪恶是把他的整个事情都放在他的机器上,这似乎在运行一个非标准的设置。但是你不应该破坏自己的格式化,“/”是日期分隔符,而你希望它始终是“/”,使用支持它的文化。 – 2009-12-09 19:48:08

+0

在您的示例日期字符串中 – 2009-12-11 06:49:21

1
string FormatDateString(string date_string) 
{ 
    DateTime date; 
    if (!DateTime.TryParse(date_string, out date) 
    { 
     return null; 
    } 

    return date.ToString("MM/dd/yyyy HH:mm:ss"); 
} 
+2

我觉得格式应为 “MM '/' DD '/' YYYY ' 'HH': '毫米':' SS” – 2009-12-09 05:26:01

+0

邪恶,你介意解释撇号的的意义你的格式?我对此并不熟悉。 Thx :) – Russell 2009-12-09 05:30:45

+2

从msdn:“' - 表示带引号的字符串(撇号)。显示两个撇号(')字符之间的任意字符串的文字值。” 当您使用撇号时,将明确定义delimeter。 – 2009-12-09 05:34:43

2

喜欢的东西:

string s = DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss"); 
+1

当我尝试你的代码,我得到以下内容: DateTime.Now.ToString(“MM/dd/yyyy HH:mm:ss”)\t“12.09.2009 10:26:09” – 2009-12-09 05:29:43

+1

不,他说得对。您系统中的默认分隔符已被定义为“。”代替 ”/”。看到这个属性:http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.dateseparator.aspx – 2009-12-09 05:34:30

+2

是的,因为它,我们应该使用“MM”/'dd'/'yyyy'' HH ':' 毫米 ':' SS”。 – 2009-12-09 05:35:50

相关问题