XXTK 发表于 2024-4-28 20:40

C# 请教 计算日期出错

本帖最后由 XXTK 于 2024-4-28 21:02 编辑

DateTime dt = DateTime.Now;//当前时间
DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek.ToString("d")));//本周周一
今天是4.28星期天.这个星期的星期一应该是4.22。但计算的结果却成了4.29,好像代码也没有问题

jyjjf 发表于 2024-4-28 20:50

你调试加点代码看看是year是几几年?

XXTK 发表于 2024-4-28 20:58

jyjjf 发表于 2024-4-28 20:50
你调试加点代码看看是year是几几年?

重新编辑了请看图片

wkfy 发表于 2024-4-28 21:04

有没有可能老外的周一实际是一周的第二天呢?例如周日才是一周的第一天。

jyjjf 发表于 2024-4-28 21:10

wkfy 发表于 2024-4-28 21:04
有没有可能老外的周一实际是一周的第二天呢?例如周日才是一周的第一天。

应该是这个导致的

XXTK 发表于 2024-4-28 21:10

wkfy 发表于 2024-4-28 21:04
有没有可能老外的周一实际是一周的第二天呢?例如周日才是一周的第一天。

没有深研过毕竟业余爱好

jyjjf 发表于 2024-4-28 21:20

XXTK 发表于 2024-4-28 21:10
没有深研过毕竟业余爱好

gpt的代码示例:
using System;

class Program
{
    static void Main()
    {
      DateTime currentDate = DateTime.Now;
      DayOfWeek dayOfWeek = GetDayOfWeek(currentDate);
      string dayOfWeekString = GetDayOfWeekString(dayOfWeek);

      Console.WriteLine($"Today is {dayOfWeekString}.");
    }

    static DayOfWeek GetDayOfWeek(DateTime date)
    {
      // 获取星期几的值,其中 Sunday = 0,Monday = 1,以此类推
      int dayOfWeekValue = (int)date.DayOfWeek;

      // 将星期日的值调整为 7,以便与假设星期一是第一天的情况相匹配
      if (dayOfWeekValue == 0)
            dayOfWeekValue = 7;

      return (DayOfWeek)dayOfWeekValue;
    }

    static string GetDayOfWeekString(DayOfWeek dayOfWeek)
    {
      switch (dayOfWeek)
      {
            case DayOfWeek.Monday:
                return "Monday";
            case DayOfWeek.Tuesday:
                return "Tuesday";
            case DayOfWeek.Wednesday:
                return "Wednesday";
            case DayOfWeek.Thursday:
                return "Thursday";
            case DayOfWeek.Friday:
                return "Friday";
            case DayOfWeek.Saturday:
                return "Saturday";
            case DayOfWeek.Sunday:
                return "Sunday";
            default:
                throw new ArgumentException("Invalid day of week.");
      }
    }
}

XXTK 发表于 2024-4-28 21:21

jyjjf 发表于 2024-4-28 21:10
应该是这个导致的

但逻辑上说不过去老外的28号也应该是星期天,它是以4.28这个日期进行计算的

jyjjf 发表于 2024-4-28 21:24

XXTK 发表于 2024-4-28 21:21
但逻辑上说不过去老外的28号也应该是星期天,它是以4.28这个日期进行计算的

excel的weekday函数就有星期几是第一天的类型参数设置

skypaladin 发表于 2024-4-28 23:07

static void Main(string[] args)
{
    //DateTime dt = DateTime.Now;//当前时间
    //DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek.ToString("d")));//本周周一
    //今天是4.28星期天.这个星期的星期一应该是4.22。但计算的结果却成了4.29,好像代码也没有问题
   
    DateTime today = DateTime.Today;
    int dayOfWeek = today.DayOfWeek - DayOfWeek.Sunday;
    DateTime lastMondayDate = today.AddDays(dayOfWeek == 0 ? -6 : -1);
    Console.WriteLine(lastMondayDate.Date);
}
页: [1] 2 3 4 5
查看完整版本: C# 请教 计算日期出错