【发布时间】:2017-03-23 09:34:50
【问题描述】:
我真的很困惑。我想要做的(似乎很简单)是在 TDateTimePicker 中显示日期+时间,并集成日历,并在其值更改后能够读取它。
我想使用 dd/MM/yyyy hh:mm 格式。
由于 TDateTimePicker 不是 TDateOrTimePicker,因此使用的是:
- 种类:dtkDate(显示日历)
- 格式:'dd/MM/yyyy hh:mm'
看起来不错,现在让我们读一下吧:
showmessage(DateTimeToStr(DateTimePicker1.Date));
仅正确显示日期。未考虑 hh:mm 部分的更改。我总是得到默认值。 然后我想:还有一个Time属性,也许我需要读取2次的值。
showmessage(DateTimeToStr(DateTimePicker1.Time));
showmessage(DateTimeToStr(DateTimePicker1.Date));
但我的输出(和问题)与以前完全相同。所以现在,让我们尝试将这个 Kind 属性更改为 dtkTime,然后读取时间,然后将其切换回 dtkDate,然后读取日期。
但是不,它仍然不起作用。将 Kind 属性从 dtkDate 切换到 dtkTime 会擦除我在 hh:mm 部分的输入。
我知道我实际上应该使用 2 个 TDateTimePickers :一个用于日期,一个用于时间。
所以我的问题是:
- 有没有一种简单的方法可以解决我的简单且非常常见的问题(a 真正的 DateTimePicker)?
还有一道德尔福设计题:
- 为什么会有一个基本没用的Format属性 误导?拥有 TimeFormat、DateFormat 和正确的格式 验证过程并不难。
请注意,我发布这个问题主要是为了避免初学者做同样冗长的调试过程和挫败感。
【问题讨论】:
-
嗯,阅读文档可以节省您一些时间:TDateTimePicker 显示一个用于输入日期或时间的列表框。注意或。进一步:因为 TDateTimePicker 是 Windows 控件的包装,所以这些格式不能通过更改 SysUtils 单元中的格式变量来更改。但是,您可以使用 Windows API 调用 DateTime_SetFormat 以编程方式指定这些设置。
-
@TomBrunberg 是的,我应该在“尝试使其工作”之前看到这一点。我无法从 IDE 访问文档这一事实并没有帮助。
-
@EtsitpabNioliv 我手头没有 Delphi 来检查实现。但文档表明:(1)
DateTime按原样返回基础字段。 (2)Date使用Get...方法;一个从基础领域剥离时间的机会。 (3)Time同样能够去除基础字段值的日期部分。 -
一个设计良好的组件/类不应该要求你阅读文档上帝帮助我们!!
-
@CraigYoung:
DateTime属性仅按原样返回基础TDateTime成员。Date属性返回TDateTime类型转换为TDate(它并没有真正剥离任何东西),Time属性返回TDateTime类型转换为TTime(这也没有真的剥离任何东西)。他们应该改用DateOf()和TimeOf()函数(或等效数学)。这在过去导致我的应用程序出现错误,我不得不手动使用DateOf()/TimeOf()来解决。
标签: delphi datetime datetimepicker datetime-format delphi-xe7