【问题标题】:TimePicker UWP BasicsTimePicker UWP 基础知识
【发布时间】:2017-12-21 01:38:46
【问题描述】:

我正在尝试编写一个简单的时钟应用程序时遇到一些问题。 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】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-16
      • 2018-05-25
      • 2014-11-28
      • 2014-02-14
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多