【问题标题】:Getting the day of the week a year starts at获取一年中的星期几开始于
【发布时间】:2018-11-05 13:11:19
【问题描述】:

我在 C++ 中创建了一个函数来获取给定日期、月份和年份的星期几(从 1900 年开始)。我必须这样做(我遵循命令,这是一个练习)的方式是总天数的模数为 7。

例如,2018 年 11 月 21 日将是当年的第 325 天(考虑到闰年)。一周中的一天将是 325 % 7,这将给出一个介于 0 和 6 之间的数字,0 代表星期日,1 代表星期一,依此类推,直到 6 代表星期六。

但这仅适用于从星期一开始的年份。 2018 年有效,但 2019 年将推迟 1 天,因为它从周二开始。

我解决这个问题的想法是通过知道那一年从哪一天开始并将其添加到给定的 0-6 数字中(如果它高于 6 则修复它),但我必须使用前一年的函数,直到达到 1900 为止,这将设置为星期一。听起来很糟糕,我想不出另一种方法。

提前致谢

【问题讨论】:

  • “我解决这个问题的想法是知道那一年从哪一天开始......”这不是你想要计算的吗?如果您已经知道一年的开始日期,那么您需要做什么?

标签: c++ date


【解决方案1】:

如果你不想使用任何库并且纯粹通过计算来做,这里有一个解决方案。

http://mathforum.org/dr.math/faq/faq.calendar.html(网页存档页面)

或者简单的解释video

您可以做的就是将此逻辑转换为您的程序并找出星期几。

int dayofweek(int d, int m, int y) 
{ 
    static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }; 
    y -= m < 3; 
    return ( y + y/4 - y/100 + y/400 + t[m-1] + d) % 7; 
} 

Code Source.

【讨论】:

  • 非常感谢!谷歌搜索时我找不到任何东西
【解决方案2】:

http://www.cplusplus.com/reference/ctime/tm/
http://www.cplusplus.com/reference/ctime/mktime/

int weakDayOfYearBegin(int year)
{
    std::tm t {};
    t.tm_year = year - 1900;
    t.tm_mday = 1;
    std::mktime(&t);
    return t.tm_wday;
}

https://wandbox.org/permlink/1ZnByeurgMrEF3fA

【讨论】:

    猜你喜欢
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多