Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Delphi查找给定周和年的开始_Delphi - Fatal编程技术网

使用Delphi查找给定周和年的开始

使用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

我正在寻找一个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例程),带有星期一=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不是很有效,数据库中应该只有一行。好啊知道了。