我正在尝试写一个简单的时钟应用程序的一些问题。 UWP和C#非常新,所以非常感谢耐心。从https://github.com/kd4gar/Windows-Core-IOT-Clock采购来源
我想要做的是根据设定的时间在晚上自动调整时钟字体/亮度。所以我正在使用TimePicker
在Settings.XAML我有一些其他设置(24小时制等)和设置页面工作,我有这两个项目:
在我的.xaml.cs中我有这个代码。我正在尝试将其保存到设置,或将默认值设置为上午7:00和上午17:00。
public DateTime DimDisplayStartTimeSetting
{
get
{
if (localSettings.Values["DimDisplayStartTimeSettingValue"] == null)
{
localSettings.Values["DimDisplayStartTimeSettingValue"] = "7:00";
}
/// return (localSettings.Values["DimDisplayStartTimeSettingValue"]);
return (localSettings.Values["DimDisplayStartTimeSettingValue"]);
localSettings.Values["DimDisplayStartTimeSettingValue"] = "7:00";
}
set
{
localSettings.Values["DimDisplayStartTimeSettingValue"] = value;
}
}
public DateTime DimDisplayStopTimeSetting
{
get
{
if (localSettings.Values["DimDisplayStopTimeSettingValue"] == null)
{
localSettings.Values["DimDisplayStopTimeSettingValue"] = "17:00";
}
/// return TimeSpan.Parse(localSettings.Values["DimDisplayStopTimeSettingValue"].ToString());
}
set
{
localSettings.Values["DimDisplayStopTimeSettingValue"] = value;
}
}
我似乎做错了什么,特别是在使用DateTime和TimeSpan时。有人能帮我理解一下吗?我已经阅读了TimePicker上的文档,并认为我理解它需要TimeSpan,但不确定如何在我的Settings.xaml.cs中设置它。谢谢!
DateTime
存储一天的确切日期和时间(例如,2017-10-12 17:00),而TimeSpan
存储一段时间的长度(例如,2小时1分5秒或3天)。
如果您不需要在设置中存储特定日期,只需要一天中的时间(似乎就是这种情况),那么请使用TimeSpan
:
public TimeSpan DimDisplayStartTimeSetting
{
get
{
if (!localSettings.Values.ContainsKey("DimDisplayStartTimeSettingValue"))
localSettings.Values["DimDisplayStartTimeSettingValue"] = TimeSpan.FromHours(7);
return (TimeSpan) localSettings.Values["DimDisplayStartTimeSettingValue"];
}
set
{
localSettings.Values["DimDisplayStartTimeSettingValue"] = value;
}
}
public TimeSpan DimDisplayStopTimeSetting
{
get
{
if (!localSettings.Values.ContainsKey("DimDisplayStopTimeSettingValue"))
localSettings.Values["DimDisplayStopTimeSettingValue"] = new TimeSpan(17, 0, 0);
return (TimeSpan) localSettings.Values["DimDisplayStopTimeSettingValue"];
}
set
{
localSettings.Values["DimDisplayStopTimeSettingValue"] = value;
}
}
在这里TimeSpan.FromHours(7);
和new TimeSpan(17, 0, 0);
做同样的工作 - 创建一个新的TimeSpan
对象,但你总是可以选择更适合这种情况的语法。
本地设置容器能够存储TimeSpan
对象,但它返回所有内容为object
,因此我们必须手动将返回值转换为TimeSpan
类型,如下所示:
return (TimeSpan) localSettings.Values["DimDisplayStopTimeSettingValue"];
本地设置容器不支持DateTime
对象,但如果您决定需要存储它们而不是TimeSpan
s,则可以始终将它们转换为容器支持的DateTimeOffset
类型。
您可以阅读更多关于日期和时间类型here之间的差异。