2013-05-07 101 views
1

我有一个奇怪的问题,其中DateTime.Now返回不正确的时间,当我打电话给时间戳日志文件的目的。有问题的代码如下:奇数DateTime.Now()行为

string logDate = DateTime.Now.ToShortDateString(); 
string logTime = DateTime.Now.ToString("HH:MM:ss"); 
string wLine = "[" + logDate + " " + logTime + "] " + line; 
Console.WriteLine(wLine); 

其中“行”变量是传递给该特定方法的字符串。 日期没问题,logTime变量内的时间比应该慢20分钟。运行此应用程序的机器上的时钟是正确的,如果我删除了它正在写入的文本文件,只要应用程序再次运行,它就会重新创建,并且文件本身上创建/修改的标记是正确的。

考虑到文件系统正确报告文件的时间,我很难理解为什么DateTime.Now的速度慢了20分钟 - 我敢肯定它不是DST问题,因为我们只在一个小时内移动了一个小时时间。

有没有其他人看过这个问题,或者至少可以指出我的方向是正确的?

TIA

+4

难道你不是指'H:mm:ss'我很确定'MM'是月份,更多关于DateTime字符串格式的信息http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx – 2013-05-07 06:44:35

+0

另外 - 不要使用'DateTime.Now'。在DST“后退”转换过程中,您将会产生歧义。改为使用'DateTimeOffset.Now'或'DateTime.UtcNow'。见http://codeofmatt.com/2013/04/25/the-case-against-datetime-now/ – 2013-05-07 13:44:59

回答

8

尝试改变这一点:

string logTime = DateTime.Now.ToString("HH:MM:ss"); 

string logTime = DateTime.Now.ToString("hh:mm:ss"); 

MM =月未分钟

+0

+1,分钟应该是小写'mm',大写'MM'是月份 – Habib 2013-05-07 06:45:30

+0

' HH'是24小时格式,'hh'是12小时格式。 – 2013-05-07 06:57:14

+0

谢谢,多么愚蠢的错误 - 但在这种情况下,我确实想离开24小时的格式,所以坚持HH而不是HH。 – 2013-07-16 12:16:51

0

'MM' 是指一个月
'毫米' 是指分钟

你可以让你的代码更容易:
只要写

string wLine = "[" + DateTime.Now.ToString("G") + "] " + line; 

,而不是

string wLine = "[" + logDate + " " + logTime + "] " + line; 

Here你可以找到更多信息有关Standart String.Formats Of DateTime

0

如何

Console.WriteLine("[{0:G}] {1}", DateTime.Now, line);