我正在尝试写一个简单的时钟应用程序的一些问题。 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中设置它。谢谢!
答案 0 :(得分:0)
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
个,则可以始终将它们转换为DateTimeOffset
类型,这是容器支持的。
您可以详细了解日期和时间类型here之间的差异。