使用Delphi查找给定周和年的开始
我正在寻找一个Delphi(10+)函数,它返回一个带有给定年份和周数的TDate:使用Delphi查找给定周和年的开始,delphi,Delphi,我正在寻找一个Delphi(10+)函数,它返回一个带有给定年份和周数的TDate: 函数StartDate(2021,53):TDate应返回2021-01-01 虽然WeekOfTheYear(EncodeDate(2021,1,1))返回53(正确),但我不能用StartOfAWeek(2021,53,1)或StartOfAWeek(2021,53,5)(5=今天是星期五)-它不被视为有效日期(=例外)。有什么建议吗 编辑: 我正在寻找一个符合ISO 8601标准的函数(如内部Delphi
函数StartDate(2021,53):TDate
应返回2021-01-01
虽然WeekOfTheYear(EncodeDate(2021,1,1))
返回53(正确),但我不能用StartOfAWeek(2021,53,1)
或StartOfAWeek(2021,53,5)
(5=今天是星期五)-它不被视为有效日期(=例外)。有什么建议吗
编辑:
我正在寻找一个符合ISO 8601标准的函数(如内部Delphi例程),带有星期一=1和特殊的星期考虑(如2021-01-01),或者更准确地说:每年的
周的“反之亦然”例程您需要的函数是:
StartOfAWeek(Year, Week, 1)
您观察到StartOfAWeek(2021,53,1)
引发了一个异常。这是正确的,因为2021
没有53周。它只有52个。第52周结束于2021年的最后一天
你会被考试的结果弄糊涂
WeekOfTheYear(EncodeDate(2021,1,1))
返回53,但由于日期在年初,因此这是2020年的第53周。如果您在2021年和53周后返回,为什么函数要返回2021-01-01
?周数使用哪种算法?据我所知,至少有两个国家(美国和欧盟)。还有:本周哪一天归还?星期天(美国使用)还是星期一(欧盟使用)?维多利亚:因为2021-01-01是第53周第53周?你来自哪里?:)如果你的意思是53周是给定年份的增量,那么它应该是2022-01-01
,而不是2021-01-01
。是的,在你的例子中,2021年的53周实际上是2022年的开始。我有点混淆了。但这意味着我找不到2020年第53周开始的日期-周一或周五。在ISO8601中,周从周一开始。因此,我被你的评论弄糊涂了。2020-12-28是Y2020W53,2021-01-01是Y2020W53,所以只有Y2020W53,我找不到相应的年份。那我就放弃了。如果我知道问题是什么,我相信问题会解决的。我只是还没有弄明白。我正在访问一个数据库,那里每周都存储一个日历。我现在发现它一年有两列;每周有两行,一行是2020年;53人,2021人;53-我试图返回一个包含这些信息的TDate,但在最后一个问题上绊倒了。没有想过2021年;53不是很有效,数据库中应该只有一行。好啊知道了。