C# 从注册表获取日期时间值

C# 从注册表获取日期时间值,c#,casting,datetime-format,C#,Casting,Datetime Format,嗨,我用此代码将日期时间值保存到注册表 string keyName = @"HKEY_CURRENT_USER\ITC"; string keyValue = "test"; string valueT1 = "T1"; string valueT2 = "T2"; DateTime dateT1 = DateTime.Now; DateTime dateT2 = dateT1.AddDays(180); Registry.SetValue(keyName, valueT1, date

嗨,我用此代码将日期时间值保存到注册表

string keyName = @"HKEY_CURRENT_USER\ITC";
string keyValue = "test";
string valueT1 = "T1";
string valueT2 = "T2";

 DateTime dateT1 = DateTime.Now;
 DateTime dateT2 = dateT1.AddDays(180);
 Registry.SetValue(keyName, valueT1, dateT1);
 Registry.SetValue(keyName, valueT2, dateT2);
DateTime regTime1;
DateTime regTime2;
regTime1 = (DateTime) Registry.GetValue(keyName, valueT1, null);
regTime2 = (DateTime)Registry.GetValue(keyName, valueT2, null);
但是当我试图通过这个代码再次得到这个值时

string keyName = @"HKEY_CURRENT_USER\ITC";
string keyValue = "test";
string valueT1 = "T1";
string valueT2 = "T2";

 DateTime dateT1 = DateTime.Now;
 DateTime dateT2 = dateT1.AddDays(180);
 Registry.SetValue(keyName, valueT1, dateT1);
 Registry.SetValue(keyName, valueT2, dateT2);
DateTime regTime1;
DateTime regTime2;
regTime1 = (DateTime) Registry.GetValue(keyName, valueT1, null);
regTime2 = (DateTime)Registry.GetValue(keyName, valueT2, null);
给出错误“指定的强制转换无效”

您知道如何正确地执行此操作吗?

您可能可以使用以下方法向注册表写入/读取日期时间

这些方法以QWORD注册表格式(64位二进制数)存储日期时间

注意:此处没有错误检查,请在使用前进行尽职调查


如果您不确定,注册表不是播放的地方

您可能可以使用以下方法向注册表写入/读取日期时间

这些方法以QWORD注册表格式(64位二进制数)存储日期时间

注意:此处没有错误检查,请在使用前进行尽职调查

如果您不确定,注册表不是播放的地方

请尝试以下代码:

DateTime dateTime1;
if (DateTime.TryParse((string)Registry.GetValue(keyName, valueT1, DateTime.MinValue),
    out dateTime1))
{
     ........      
}
请尝试以下代码:

DateTime dateTime1;
if (DateTime.TryParse((string)Registry.GetValue(keyName, valueT1, DateTime.MinValue),
    out dateTime1))
{
     ........      
}


它可能在注册表中保存为字符串。将其以特定格式保存到注册表中,并使用datetime.parse以相同的格式读取。您是否查看了RegEdit中的值以了解它们最终是什么类型的?由于您在编写它们时没有指定类型,它们很可能最终成为字符串(
REG_SZ
)。@DavidLibido您能给我一个如何将其保存为spesific格式的示例吗,因为正如我详细看到的那样。setValue它没有给出如何执行的信息请注意,您最好将日期转换为字符串(使用
“O”
格式说明符)并存储生成的字符串。。。读取后解析为字符串。不太有趣,但代码可读性更高,而且可以保证做你想做的事情。注册表没有日期时间格式。处理它最简单的方法可能是将其写成字符串并指定所需的格式(例如,“ccyymddhhmmss
),然后将其读回并相应地解析为
日期时间
。或者将其作为二进制数据写入(
REG\u binary
)并将其读回double,然后将其转换为
DateTime`。它可能在注册表中保存为字符串。将其以特定格式保存到注册表中,并使用datetime.parse以相同的格式读取。您是否查看了RegEdit中的值以了解它们最终是什么类型的?由于您在编写它们时没有指定类型,它们很可能最终成为字符串(
REG_SZ
)。@DavidLibido您能给我一个如何将其保存为spesific格式的示例吗,因为正如我详细看到的那样。setValue它没有给出如何执行的信息请注意,您最好将日期转换为字符串(使用
“O”
格式说明符)并存储生成的字符串。。。读取后解析为字符串。不太有趣,但代码可读性更高,而且可以保证做你想做的事情。注册表没有日期时间格式。处理它最简单的方法可能是将其写成字符串并指定所需的格式(例如,“ccyymddhhmmss
),然后将其读回并相应地解析为
日期时间
。或者将其作为二进制数据写入(
REG\u binary
)并将其读回double,然后将其转换为
DateTime`……注册表与windows中的所有其他位置一样。相反,我鼓励玩它;-)你可以在任何地方破坏你的系统,注册表也不是特别的。只是另一个游乐场。@t3chb0t,公正的评论,我喜欢你的青春活力,你现在可以投票支持我的答案:)给你。。。我今天还有39英镑要花,所以请你先走一步;-)我不确定这是否已更改,但是在.NET 4.5下,
Registry.GetValue()
显示
字符串键名
字符串值名
对象默认值
的参数。没有提到使用
RegistryValueKind
的重载。您能确认吗?@Memetican是的,您是正确的,这似乎是一个错误,您可以输入默认值,也可以省略参数……注册表与windows中的所有其他位置一样。相反,我鼓励玩它;-)你可以在任何地方破坏你的系统,注册表也不是特别的。只是另一个游乐场。@t3chb0t,公正的评论,我喜欢你的青春活力,你现在可以投票支持我的答案:)给你。。。我今天还有39英镑要花,所以请你先走一步;-)我不确定这是否已更改,但是在.NET 4.5下,
Registry.GetValue()
显示
字符串键名
字符串值名
对象默认值
的参数。没有提到使用
RegistryValueKind
的重载。您能确认吗?@Memetican是的,您是正确的,这似乎是一个错误,您可以输入默认值或忽略参数