当前位置: 首页 > 知识库问答 >
问题:

localtime()报告错误的小时和isdst标志

许兴文
2023-03-14

localtime报告的tm_小时(1小时)和tm_isdst(1小时)不正确。

笔记:

  1. 我在东部时区
  2. 目前是11月6日(不是夏令时)
  3. 未设置环境变量TZ
  4. 控制面板(日期)

有许多关于这个问题的SO帖子,但没有一个直接解决这个问题。

这是一个错误还是我做错了什么?

我的代码如下(使用MSVC“Win32 Debug”编译,在Win10-64上运行):

//  localtime.c - Test Program for localtime()

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>

    int
    main(int argc,char **argv)
    {
        time_t utc;
        struct tm *tm;
    
        utc = time( NULL );
        tm = localtime( &utc );
    
        printf( "Program localtime.exe:\n" );
        printf( "Env Var TZ: %s\n", getenv( "TZ" ) );
        printf( "tm->tm_hour:  %d\n", tm->tm_hour  );
        printf( "tm->tm_isdst: %d\n", tm->tm_isdst );
    
        printf( "Press any key to exit...\n" );
        getch();
        exit( 0 );
        return( 0 );
    }     

程序输出(美国东部时间上午10:20运行)

Program localtime.exe:
Env Var TZ: (null)
tm->tm_hour:  11
tm->tm_isdst: 1

共有2个答案

谷梁永年
2023-03-14

非常非常奇怪。如果我设置env var“TZ”,localtime()可以正常工作。奇怪的是,我把它设置成什么都没有区别,例如“XXX”。

方博
2023-03-14

我猜你在时间函数中使用了一个未初始化的值,而没有捕获它的返回值。

试试这个:

   time_t ltime;
   struct tm *tm;
   ltime = time( NULL );
   tm = localtime( &ltime );
 类似资料:
  • 错误日志对于发现程序中的错误是非常有帮助的,但是有些时候它也会将应用程序的结构暴露给外部。为了有效的保护你的应用程序不受到由此而引发的问题。你需要将在你的服务器上使用开发和生产(线上)两套不同的配置。 开发环境 为了在开发环境中显示所有可能的错误,将你的 php.ini 进行如下配置: display_errors = On display_startup_errors = On error_re

  • 1.1.2. 错误报告 没有不会犯错的开发者,PHP的错误报告功能将协助您确认和定位这些错误。可以PHP提供的这些详细描述也可能被恶意攻击者看到,这就不妙了。使大众看不到报错信息,这一点很重要。做到这一点很容易,只要关闭display_errors,当然如果您希望得到出错信息,可以打开log_errors选项,并在error_log选项中设置出错日志文件的保存路径。 由于出错报告的级别设定可以导致

  • 当简单报表不适用于子报表时,此操作有效...

  • 需知 当你觉得发现了一个Swoole内核的bug时,请提出报告。 Swoole的内核开发者们或许还不知道问题的存在, 除非你主动提出报告,否则BUG也许将很难被发现并修复, 你可以在 Github的issue区 提出错误报告(即点击右上角绿色的New issue按钮),这里的错误报告将会被最优先解决。 请不要在邮件列表或私人信件中发送错误报告,Github的issue区同样可以提出对于Swoole

  • 错误报告 Stylus内置梦幻般的错误报告,针对语法、解析以及计算错误,完整的堆栈跟踪,行号和文件名。 解析错误 解析错误例子: body form input == padding 5px 呈现为: Error: /Users/tj/Projects/stylus/testing/test.styl:4 3: ' form input' 4: ' == padding

  • 我试图通过一个类中的函数连接到MySql。同样的事情可以做得更容易,但这也是一次学习的经历。代码全部按预期工作,但是如果MySql查询失败,mysqli_error()返回空白,mysqli_errno()返回0。我在手动将数据输入mysql时发现了错误,并且它在db中是一个太短的列,但是我不明白为什么mysqli_error()和mysql_errno()都没有报告这个错误。提前感谢您的任何帮助