You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#动态指定DateTime对象并转换为Unix时间戳的技术求助

C# 动态生成每周日期范围并转换为Unix时间戳

核心思路

基于当前日期,计算包含今日的周内的指定起始/结束日期(0点整),再转换为Unix时间戳。关键是通过DayOfWeek枚举计算日期偏移量,彻底避免硬编码固定日期。

通用辅助方法

先封装一个可复用的方法,用来获取当前周内指定星期几的0点日期:

// 获取包含今日的周内,指定星期几的0点日期
// 参数targetDay:目标星期几(DayOfWeek.Monday=周一,DayOfWeek.Sunday=周日)
private static DateTime GetWeeklyTargetDay(DayOfWeek targetDay)
{
    DateTime today = DateTime.Today;
    // 计算今日到目标星期几的偏移天数,确保结果为正
    int dayOffset = ((int)targetDay - (int)today.DayOfWeek + 7) % 7;
    // 得到本周内目标星期几的0点日期
    DateTime targetDate = today.AddDays(-((int)today.DayOfWeek - (int)targetDay + 7) % 7);
    return targetDate.Date;
}

分场景实现

场景1:起始为周日0点,结束为周日0点

范围为上周日0点到本周日0点(覆盖完整一周):

// 起始:上周日0点
DateTime startDate_Scenario1 = GetWeeklyTargetDay(DayOfWeek.Sunday).AddDays(-7);
// 结束:本周日0点
DateTime endDate_Scenario1 = GetWeeklyTargetDay(DayOfWeek.Sunday);

// 转换为Unix时间戳(秒)
long unixStart_S1 = ((DateTimeOffset)startDate_Scenario1).ToUnixTimeSeconds();
long unixEnd_S1 = ((DateTimeOffset)endDate_Scenario1).ToUnixTimeSeconds();

场景2:起始为周一0点,结束为周三0点

范围为当前周的周一0点到周三0点:

// 起始:当前周周一0点
DateTime startDate_Scenario2 = GetWeeklyTargetDay(DayOfWeek.Monday);
// 结束:当前周周三0点(周一加2天)
DateTime endDate_Scenario2 = startDate_Scenario2.AddDays(2);

// 转换为Unix时间戳
long unixStart_S2 = ((DateTimeOffset)startDate_Scenario2).ToUnixTimeSeconds();
long unixEnd_S2 = ((DateTimeOffset)endDate_Scenario2).ToUnixTimeSeconds();

场景3:起始为周一0点,结束为周五0点

完全匹配你示例中的需求,范围为当前周的周一0点到周五0点:

// 起始:当前周周一0点
DateTime startDate_Scenario3 = GetWeeklyTargetDay(DayOfWeek.Monday);
// 结束:当前周周五0点(周一加4天)
DateTime endDate_Scenario3 = startDate_Scenario3.AddDays(4);

// 转换为Unix时间戳
long unixStart_S3 = ((DateTimeOffset)startDate_Scenario3).ToUnixTimeSeconds();
long unixEnd_S3 = ((DateTimeOffset)endDate_Scenario3).ToUnixTimeSeconds();

// 生成API请求URL
var punchHistoryURL = $"https://www.paycomonline.net/v4/rest/index.php/api/v1/employee/{fields.EECODE_View}/punchhistory?startdate={unixStart_S3}&enddate={unixEnd_S3}";

关键说明

  • DateTime.Today自动获取当前日期的0点,避免时间部分干扰计算
  • 所有逻辑基于当前日期动态生成,每周自动切换到新的日期范围,无需手动维护
  • Unix时间戳转换使用DateTimeOffset,默认适配本地时区;若需UTC时间,可将DateTime.Today替换为DateTime.UtcNow.Date调整逻辑

内容的提问来源于stack exchange,提问作者Justin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 16:04:57