TimePicker UWP基础知识

问题描述 投票:0回答:1

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

c# uwp windows-10-iot-core
1个回答
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对象,但如果您决定需要存储它们而不是TimeSpans,则可以始终将它们转换为容器支持的DateTimeOffset类型。

您可以阅读更多关于日期和时间类型here之间的差异。

© www.soinside.com 2019 - 2024. All rights reserved.