使用 C# 指定 DateTime 对象并转换为 Unix 格式

问题描述 投票:0回答:2

我正在编写一个应用程序,但无法找出一个函数来使用 C# 通过“开始”和“结束”日期动态设置一系列特定的 DateTime 对象。

这是我的标准:

  • 案例 1:周日中午 12 点开始,周日上午 12 点结束。
  • 案例 2:周一中午 12 点开始,周三上午 12 点结束。
  • 案例 3:周一中午 12 点开始,周五上午 12 点结束。

本质上,目标是每周自动更新这些日期,以便可以将它们转换为 Unix 格式以供 API 调用。我无法对这些值进行硬编码,因为这些对象必须每周动态更改。

例如,假设情况 3 的开始日期为 4/3/23,结束日期为 4/7/23。下周当此应用程序启动时,我需要将这些对象更新为开始日期 4/10/23 到结束日期 4/14/23。

我对开发相当陌生,因此任何示例或指导都将受到高度赞赏,即使解决方案没有指定上述确切情况。

我已经走到这一步,直到我意识到这个过程不能是静态的、硬编码的值。我将使用基于案例 3 的示例:

DateTime day1 = new DateTime(2023, 4, 3, 0, 00, 00);
DateTime day2 = new DateTime(2023, 4, 7, 0, 00, 00);

long unixDay1 = ((DateTimeOffset)day1).ToUnixTimeSeconds();
long unixDay2 = ((DateTimeOffset)day2).ToUnixTimeSeconds(); 

//URL used for API call
var punchHistoryURL = 

$"https://www.paycomonline.net/v4/rest/index.php/api/v1/employee/{fields.EECODE_View}/" + "punchhistory" + $"?startdate={unixDay1}&enddate={unixDay2}";

我需要有关如何执行此操作的指导,但以便 day1 和 day2 对象反映下周的当前日期。

c# datetime
2个回答
-1
投票

如果您创建应用程序来查看当前日期/时间,您可以使用 Windows 任务计划程序以您想要的时间间隔运行它:

enter image description here

然后在您的应用程序中,您只需在今天的日期上添加 5 天或计算有多少天等。

您也可以按常规时间表以外的方式运行它:

enter image description here

您还可以为其指定一个不同的“起始位置”值,例如,您可以在其中读取 Ini 文件中的参数和其他值。

enter image description here

这将使您的应用程序更加灵活,并消除对大量日期和其他计算和变量的需求。

如果您决定使用此功能,请添加内部提示。请留意此设置以处理夏令时。

enter image description here


-1
投票

既然你正在处理“星期几”,我想你可能只是抓住Unix时间戳并除以

7 * 86400

每天有

86400
秒,每周有
7
天。 所以,一整周就是
7 * 86400
秒。

这可以通过简单的数学计算来实现,因为不涉及闰年的东西。

因为 1970 年 1 月 1 日是星期四,所以您可以轻松获得上星期四凌晨 12:00 的 Unix 时间戳。

long lastGmtThursdayMidnight = DatetimeOffset.Now.ToUnixTimeSeconds() / 86400 / 7 * 86400 * 7;

此后,您可以根据需要通过添加或减去

n * 86400
n * 3600
来调整结果。

有几个细节需要注意。

  • 在一些国家或地区,星期日是一周的开始,而另一些国家或地区则将星期一视为一周的第一天。我不知道您是否需要本周的时间戳或未来一周的时间戳。但如果您要处理多个时区,则需要注意。
  • 如果您想要 GMT 时区以外的午夜时间戳,则需要处理时区问题。我的示例代码将为您提供 GMT 时区午夜的时间戳。例如,我住在时区 UTC+08:00。 “2023-04-09 00:00:00 GMT”是“2023-04-09 08:00:00 UTC+08:00”。所以我总是需要减去
    8 * 3600
    来获取我的时区午夜的时间戳。
  • 如果您的时区涉及夏令时,您也需要处理这一点。
© www.soinside.com 2019 - 2024. All rights reserved.