如何将以毫秒为单位的日期时间存储到C#中的DateTime对象中?

如何将以毫秒为单位的日期时间存储到C#中的DateTime对象中?,c#,datetime,C#,Datetime,我有DateTime对象中有一个键的字典 static Dictionary<DateTime, string> messageList = new Dictionary<DateTime, string>(); static Dictionary messageList=new Dictionary(); 我不想用毫秒作为键来存储日期时间 static Dictionary<DateTime, string> messageList = new Dict

我有DateTime对象中有一个键的字典

static Dictionary<DateTime, string> messageList = new Dictionary<DateTime, string>();
static Dictionary messageList=new Dictionary();
我不想用毫秒作为键来存储日期时间

static Dictionary<DateTime, string> messageList = new Dictionary<DateTime, string>();
static Dictionary messageList=new Dictionary();

我想以
01/01/2008 00:30:45.125格式将数据时间存储为in Dictionary的键。

DateTime类已经有Millseconds组件,您的代码应该可以工作。如果要以特定格式显示日期,请使用ToString()函数并指定适当的格式字符串

var myDate = DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss.fff");

我强烈怀疑您混淆了
DateTime
的值和
DateTime
的文本表示

实例没有任何隐式格式。它只具有基于的日期和时间值。“格式”的概念只有在得到文本(又称字符串)表示时才适用

如果您真的想用特定的“格式”来“存储”数据(大多数情况下您不应该这样做),那么您需要使用
Dictionary
,而不是
Dictionary

如果你想“截断”纳秒部分,只保留毫秒,你可以使用这样的方法

myDateTime = myDateTime.AddTicks( - (myDateTime.Ticks % TimeSpan.TicksPerMillisecond) / 100);
我想以01/01/2008 00:30:45.125格式存储数据时间,作为字典中的键

DateTime
对象没有格式。它们是表示日期和时间的二进制数据。您可以轻松地使用带有值的
DateTime
对象作为字典键,该值表示
01/01/2008 00:30:45.125所描述的瞬间,但这不是一回事

如果需要特定的字符串格式,请使用字符串作为键类型。但可能你想得太多了,你真的不想在字典中使用那种特殊的字符串格式。毕竟,您总是可以获取
DateTime
对象并格式化它以便以后显示,这确实是更好的做法

剩下的问题是
DateTime
的精度低于毫秒,这意味着在一毫秒内可以有多个
DateTime
值。如果您的环境可以在同一毫秒内生成两个数据点,并且您希望确保它们最终位于词典中的同一位置,则需要截断或舍入
DateTime
值。我更喜欢通过使用旧属性构造一个新的
DateTime
值来实现这一点,尽管使用
Ticks
的一些计算可能更快:

public DateTime RoundToMillisecond(DateTime original)
{
    return new DateTime(original.Year, original.Month, original.Day, original.Hour, original.Minute, original.Second, original.Millisecond);
}

DateTime
类型已经包含毫秒。那么您遇到了什么问题?您是在谈论以特定格式存储DateTime吗?是的。我想以特定的格式存储它。我正在利用字典发送一封自动邮件。您需要构造一个没有刻度分数的新日期时间:
DateTime key=newdatetime(dt.Year,dt.Month,dt.Day,dt.Hour,dt.Second,dt.millis秒)
dt
为原始日期时间。或者存储一个字符串
dt.ToString(“MM/dd/yyyy HH:MM:ss.fff”)注意24小时格式以避免重复。我想将其存储在DateTime变量中。我试过同样的语法。有没有一种方法可以在不将其转换为字符串的情况下激活它,因为我的字典的键是DateTime类型的。您的代码是否有错误?如果是,请编辑您的问题并添加更多信息。我看不出代码有任何问题。@Shameel DateTime.Now是一个属性,而不是一个方法。您的代码应该可以工作。不。只要他保持刻度,它就不会工作。@TaW好的,我想他会增加他需要的精度值。谢谢你指出。是的。它与字符串键一起工作。但我不想改变现有词典的定义。希望除了更改密钥的数据类型,我没有其他选择。没有必要更改密钥。只需删除日期时间中的刻度@sujandlingaraj添加了一个解决方案,如果你想截断纳秒,并且根据OP的输出(即
01/01/2008 00:30:45.125
),只有毫秒作为
.125
),看起来他想截断纳秒部分,只保留毫秒部分作为
.125
。我的答案也是基于此编辑的。@你是否愿意至少发表评论,这样我就可以看出我可能错在哪里了?别忘了
original.Kind
:)