TimePicker UWP基础知识

时间:2017-12-20 16:41:05

标签: c# uwp windows-10-iot-core

我正在尝试写一个简单的时钟应用程序的一些问题。 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中设置它。谢谢!

1 个答案:

答案 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之间的差异。