【问题标题】:Day of the week from a given date从给定日期开始的星期几
【发布时间】:2014-02-27 12:46:36
【问题描述】:

我需要找到给定日期的工作日;我有以下代码但不起作用

int day;
char *str ="25/02/2014";  
struct tm tm;

if (strptime(str, "%d/%m/%Y", &tm) != NULL)
{
    time_t t = mktime(&tm);
    day = localtime(&t)->tm_wday;
    return day;
}

我在这里做错了什么?

【问题讨论】:

  • 这是一个类似的问题stackoverflow.com/questions/5797814/…
  • 这可以编译吗?除非您将 struct tm *tm; 替换为 struct tm tm;
  • 即使在改变 struct tm tm 之后; weekday 的结果不好。day 的结果总是 4 ("27/02/2014")
  • 我用struct tm * tm; 重新运行了这个,但从每个&tm 中删除了&,我得到了结果:2014 年 2 月 27 日有 4 个,2014 年 2 月 25 日有 2 个.
  • 如果你使用struct tm *tm并且你没有初始化为NULL然后tm指向一些无效的地址并且当你传递给strptime的那个无效内存位置的地址时用数据填充该内存。在这种情况下,行为将是未定义的。

标签: c++ c datetime


【解决方案1】:

您应该使用struct tm tm; 而不是struct tm * tm;

您需要使用memset(&tm,0x00,sizeof(tm)); 初始化tm,否则mktime 将返回-1

【讨论】:

  • 使用memset(&tm, 0, sizeof tm),将isdst 字段设置为-1 是否比设置为0 更好? (我想这没什么区别,因为 DST 在午夜发生变化(h:m:s == 0:00:00)很少见。)
【解决方案2】:

2014 年 2 月 27 日的结果 4 是正确的,请参阅 time.h

说明
...
int tm_wday 星期几 [0,6](星期日 =0)。

星期日是 0,星期一 = 1,星期二 = 2,星期三 = 3,星期四 = 4,...

【讨论】:

    猜你喜欢
    • 2016-10-19
    • 2017-07-19
    • 2020-03-24
    • 2017-03-23
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 2021-12-01
    相关资源
    最近更新 更多