标签: mktime

在PHP的exec中使用mktime运行C代码

我有一个奇怪的PHP问题和一个使用当前时间的C脚本.我的程序有点复杂,但问题缩小到这个:

我有这个C代码打印1分钟前的日期,当前日期和从现在开始1分钟的日期:

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

int main(int argc, char **argv){
  char date[9];
  time_t rawtime;
  struct tm * ptm;
  int i;

  time(&rawtime);
  ptm = gmtime(&rawtime);
  ptm->tm_min--;

  for(i = 0; i < 3; i++){
    rawtime = mktime(ptm);
    ptm = gmtime(&rawtime);
    snprintf(date, 9, "%d %d %d", ptm->tm_mday, ptm->tm_hour, ptm->tm_min);
    printf("%s\n", date);

    ptm->tm_min++;
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我在shell中运行它时,我得到了正确的结果(打印格式是月份,小时,分钟):

$ ./test
17 20 7
17 20 8
17 20 9
Run Code Online (Sandbox Code Playgroud)

但是,当我通过PHP执行它时,我得到了奇怪的结果.这是PHP代码:

<?php
exec("path_to_exec/test", $output);
echo "$output[0]<br/>";
echo "$output[1]<br/>";
echo "$output[2]<br/>";
?>
Run Code Online (Sandbox Code Playgroud)

这是输出:

17 20 …
Run Code Online (Sandbox Code Playgroud)

php c date mktime

5
推荐指数
1
解决办法
287
查看次数

如何用ep_之前的time_t计算C++中的时差?

我想用我的简单程序做的是计算两个日期之间的秒差.

time_t referenceDate;
time_t dateNow = time(0);
struct tm referenceDateComponent = {0};
referenceDateComponent.tm_hour = 0;
referenceDateComponent.tm_min = 0;
referenceDateComponent.tm_sec = 0;
referenceDateComponent.tm_year = 89;
referenceDateComponent.tm_mon = 11;
referenceDateComponent.tm_mday = 31;
referenceDate = mktime(&referenceDateComponent);  
long seconds = difftime(dateNow, referenceDate);
Run Code Online (Sandbox Code Playgroud)

Whit应用程序上面的代码工作正常,但如果尝试设置tm.year负数(在1900年之前构建日期)mktime()函数返回-1

我知道该time_t类型只管理从1970年1月1日UTC开始的日期,根据文档:

由于历史原因,它通常被实现为表示自UTC时间1970年1月1日00:00(即,unix时间戳)以来经过的秒数的整数值.尽管库可以使用替代时间表示来实现此类型.

我知道还有Boost库,但对我来说不是一个有用的解决方案.

所以我的问题是,从1970年以前的日期开始,有什么办法可以在几秒钟内获得变化?

c++ time-t mktime difftime

5
推荐指数
2
解决办法
4588
查看次数

Ruby 将 DD/MM/YYYY 字符串转换为 YYYY,MM,DD

我正在收集用户输入的“DD/MM/YYYY”

目的是以 csv YYYY,MM,DD 的形式传递到 mktime。

puts "Please enter dob in dd/mm/yyyy format;"
inp = gets.chomp
inp = inp.gsub(" ","")
while inp.length != 10
  puts "Please use dd/mm/yyyy format"
  inp = gets.chomp
end
bday = inp.gsub("/",",")

ctime = Time.new
btime = Time.mktime(bday)
lsecs = ctime - btime
ysecs = Time.mktime(2001) - Time.mktime(2000)
rsecs = 1000000000 - lsecs
ryears = rsecs / ysecs
puts "You are currently #{lsecs} seconds old"
puts "You have #{ryears} years until you are a billion seconds …
Run Code Online (Sandbox Code Playgroud)

time date mktime

5
推荐指数
1
解决办法
5176
查看次数

PHP将mktime结果转换为UTC

我正在使用此代码在PST(又名America/Los_Angeles)时间生成昨天的开始.我无法弄清楚如何将结果转换为UTC.

date_default_timezone_set("America/Los_Angeles");
$time1 = date("Y-m-d H:i:s", mktime(0,0,0, date('n'), date('j')-1, date('Y')));
Run Code Online (Sandbox Code Playgroud)

我试过这个,但$ time1不是datetime,它是字符串.所以以下方法不起作用.

$time1->setTimezone(new DateTimeZone("UTC")); 
Run Code Online (Sandbox Code Playgroud)

php datetime utc mktime

5
推荐指数
1
解决办法
480
查看次数

为什么 mktime 给我的时间少了一个小时?

我想看看 1970 年 1 月 1 日的 00:00:00 是否实际上对应于 0 秒,我写了以下内容:

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

int main(void) {
    int year = 1970;
    
    struct tm t = {0};
    
    t.tm_mday = 1; // January
    t.tm_year = year - 1900;
    t.tm_hour = 0;
    t.tm_isdst = -1;
    
    printf("%ld\n", mktime(&t));
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给我的值为-3600。我哪里错了?

PS:使用 GCC v.10.1 进行测试。我尝试在另一个架构下使用另一个编译器,它给了我正确的值。

c mktime

5
推荐指数
1
解决办法
708
查看次数

php - mktime还是strtotime?

我正试图将2010-02转换为2010年2月.但是,我一直持续到1969年12月

我尝试过使用mktime,strtotime和两者的某种组合,但仍然无法做到......

这是我最近尝试过的......

$path_title = date('F, Y', mktime(0,0,0,2,0,2010));
Run Code Online (Sandbox Code Playgroud)

php strtotime mktime

4
推荐指数
1
解决办法
9209
查看次数

创建PHP未来日期的更好方法

是否有更快捷的方法来创建日期,例如:

echo date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")+3,   date("Y")));
Run Code Online (Sandbox Code Playgroud)

谢谢,如果你能提供帮助.

php date mktime

4
推荐指数
1
解决办法
3191
查看次数

获取上个月的日期范围

我需要帮助以下列格式获取前几个月的完整日期范围:Ymd

我已经成功地获得了"这个"月份的完整日期范围,但没有达到"前一个"月份的完整日期范围.

任何帮助是极大的赞赏!

php datetime date strtotime mktime

4
推荐指数
2
解决办法
8949
查看次数

使用2012年的mktime显示月份列表

我目前正面临一个需要尽快解决的问题.

我试图通过使用以下代码列出当前年度(2012年)的所有月份:

for ($m=1; $m<=12; $m++) {
     $month = date('F', mktime(0,0,0,$m));
     echo $month. '<br>';
     }
Run Code Online (Sandbox Code Playgroud)

但我得到以下意外的输出:

1月3月3月5月5月7月7月8月10月10月12月12月

我做错了什么,请帮忙!

php date mktime

4
推荐指数
4
解决办法
3万
查看次数

PHP mktime和时区

我正在研究一些与时间相关的功能,我选择始终使用UTC时间并将时间戳存储为整数以保持一致性.

但是,我注意到当我使用mktime它时,似乎当前设置的时区会影响返回值mktime.从我理解的文档中,mktime应该返回自epoch以来的秒数:

返回与给定参数对应的Unix时间戳.此时间戳是一个长整数,包含Unix Epoch(1970年1月1日00:00:00 GMT)与指定时间之间的秒数.

http://php.net/manual/en/function.mktime.php

但是,似乎mktime包括当前设置的时区.使用以下代码时:

date_default_timezone_set('UTC');
$time = mktime(0, 0, 0, 1, 1, 2016 );
echo "{$time}\n";

date_default_timezone_set('Australia/Sydney');
$time = mktime(0, 0, 0, 1, 1, 2016 );
echo "{$time}\n";
Run Code Online (Sandbox Code Playgroud)

我希望这两个时间值相同,但显然它们不是:

1451606400
1451566800
Run Code Online (Sandbox Code Playgroud)

这似乎是一个11小时的差异:

1451606400 - 1451566800 = 39600 / (60*60) = 11
Run Code Online (Sandbox Code Playgroud)

我在使用时没有正确理解mktime和/或为什么要考虑时区mktime

php timezone mktime

4
推荐指数
1
解决办法
3616
查看次数

标签 统计

mktime ×10

php ×7

date ×5

c ×2

datetime ×2

strtotime ×2

c++ ×1

difftime ×1

time ×1

time-t ×1

timezone ×1

utc ×1