【问题标题】:Get current year, day and month in delphi在delphi中获取当前年、日和月
【发布时间】:2013-11-27 14:22:50
【问题描述】:

我基本上想要这个 C# 代码:

if (month > currentDate.Month || (day > currentDate.Day && month > currentDate.Month)) 
{
    age = currentDate.Year - year - 1;
}
else
{
    age = currentDate.Year - year;
}

进入delphi。但我遇到的问题是我不知道如何将当前年份、月份和日期作为整数,所以我可以进行一些计算。我点击了谷歌上与此相关的每个结果,但没有一个对我有帮助。 (真的不是 delphi 的粉丝,但它是我们在我的计算课上正在做的语言)

【问题讨论】:

  • 看看这里的函数会是一个好的开始delphibasics.co.uk/ByFunction.asp?Main=DatesAndTimes
  • 看看DecodeDateNow
  • DateUtils 是您所需要的。您是在文档中搜索,还是在这里更容易询问?
  • 什么文件夹结构的东西?您只需在用途中添加DateUtils。如果您忽略错误中包含的消息,您将在编程方面取得很小的进展。永远不要说“我有错误”。准确报告错误是什么。不要只是猜测并尝试随机的事情。了解问题所在并妥善解决。
  • @JeroenWiertPluimers 不,它的格式与 Delphi 一样。这将是德尔福的评论,不是吗?看看我即将对该问题进行的编辑。

标签: delphi validation datetime


【解决方案1】:

直译如下:

uses
  ..., DateUtils;

if (month > MonthOf(Date)) or ((day > DayOf(Date)) and (month > MonthOf(Date)) then 
begin
  age := YearOf(Date) - year - 1;
end else
begin
  age := YearOf(Date) - year;
end;

但这不是最好的翻译。如果不出意外,如果代码在当前日期更改时的午夜运行,则重复调用 Date() 会导致问题。以下会更安全:

uses
  ..., SysUtils;

var
  wYear, wMonth, wDay: Word:
begin
  ...
  DecodeDate(Date, wYear, wMonth, wDay);
  if (month > wMonth) or ((day > wDay) and (month > wMonth) then 
  begin
    age := wYear - year - 1;
  end else
  begin
    age := wYear - year;
  end;
  ...
end;

或者,看看DateUtils.YearsBetween() 函数:

uses
  ..., SysUtils, DateUtils;

age := YearsBetween(Date, EncodeDate(year, month, day));

【讨论】:

    【解决方案2】:

    DateUtils 添加到您的用途中,然后您可以将DayOf 用于月份中的某天,MonthOf 用于年份,YearOf 用于年份部分。 Date 为您提供传递给这些函数的当前日期。

    【讨论】:

    • 或使用SysUtils.DecodeDate(),它在单个函数调用中返回月、日和年。 DayOf()MonthOf()YearOf() 在内部使用 DecodeDate(),因此您将调用 DecodeDate() 三次并丢弃 2/3 的返回数据。
    • 我更喜欢你的回答,所以请 +1。特别是因为我没有记住午夜前后重复的约会电话。
    【解决方案3】:

    您可以在单个函数调用中使用DecodeDateDate 函数的返回值中分离出年、月和日值:

    var
      CurrYear, CurrMonth, CurrDay: Word;
    begin
      DecodeDate(Date(), CurrYear, CurrMonth, CurrDay);
      ...
    end;
    

    【讨论】:

    • 刮掉“旧版本”。 DateUtils 已经存在 10 多年了。
    • @FreeConsulting:我们经常在这里收到有关 Delphi 3、5 和 7 的问题。如果使用其中之一的人在搜索中发现了这个,它仍然很有用。 :-) 我自己不使用早于 D2007 的任何东西。
    • DecodeDate() 仍然存在于现代版本中,并且与以往一样有效。仅仅因为DateUtils 单元的存在并不总是使其成为适用于各种情况的最佳选择。如果您需要所有三个日期值 - 日、月、年 - 调用 DecodeDate() 是有意义的,它在一次调用中返回所有三个值,而不是使用将日期值分隔为多个函数调用的 DateUtils 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多