相关疑难解决方法(0)

如何将boost :: posix_time :: ptime转换为time_t?

是否有一些"标准"方式或我能做的最好的是直接通过减去来计算它gregorian::date(1970,1,1)

c++ boost boost-date-time

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

如何用C转换UTC到当地时间?

这是一个简单的问题,但解决方案似乎远非简单.我想知道如何从UTC转换为本地时间.我正在寻找一个标准的C解决方案,或多或少保证可以在任何位置的任何计算机上工作.

我仔细阅读了以下链接,但我找不到解决方案:

在C中将包含localtime的字符串转换为UTC

在C/C++中在本地时间和GMT/UTC之间转换

我尝试了很多变体,例如(datetime是一个带有时间和日期的字符串,以UTC表示):

strptime(datetime, "%A %B %d %Y %H %M %S", tp);
strftime(printtime, strlen(datetime), "%A %B %d %Y %H %M %S", tp);
Run Code Online (Sandbox Code Playgroud)

要么

strptime(datetime, "%A %B %d %Y %H %M %S", tp);
lt=mktime(tp);
printtime=ctime(&lt);
Run Code Online (Sandbox Code Playgroud)

无论我尝试什么,printtime最终都与UTC相同.

编辑11-29-2013:基于下面"R"的非常有用的答案,我终于开始创建一个工作示例.我发现它在我测试它的两个时区中正常工作,CET和PST:

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

long long diff_tm(struct tm *a, struct tm *b)
{
  return a->tm_sec - b->tm_sec
          +60LL*(a->tm_min - b->tm_min)
          +3600LL*(a->tm_hour - b->tm_hour)
          +86400LL*(a->tm_yday - b->tm_yday)
          +(a->tm_year-70)*31536000LL
          -(a->tm_year-69)/4*86400LL
          +(a->tm_year-1)/100*86400LL
          -(a->tm_year+299)/400*86400LL
          -(b->tm_year-70)*31536000LL
          +(b->tm_year-69)/4*86400LL
          -(b->tm_year-1)/100*86400LL
          +(b->tm_year+299)/400*86400LL;
}


int main()
{
  time_t …
Run Code Online (Sandbox Code Playgroud)

c time posix utc datetime-conversion

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

获取C中时区的夏令时转换日期

在C中,是否有一种简单的跨平台方法来检索给定时区开始和结束夏令时的日期?

我已经有时区偏移信息以及当前是否正在观察夏令时,但我确实需要夏令时开始和结束的日期(对于我无法控制的外部依赖).在Windows中,我使用GetTimeZoneInformation来获取TimeZoneInfo,但我找不到类似的Linux/Solaris/Mac功能.我还应该指出,我不能仅仅依靠美国的夏令时采用规则,因为我无法预测它将被用于的国家.

我知道获取此信息的唯一方法是通过zdump或者直接查看/ usr/share/lib/zoneinfo文件本身,但我希望有更好的解决方案.

感谢您的任何帮助,您可以提供.

c timezone dst

8
推荐指数
2
解决办法
6157
查看次数

如何获得UTC时间

我正在编写一个小程序来下载气象软件包使用的相应文件集.这些文件的格式YYYYMMDDYYYYMMDD HHMMUTC 类似.我想知道C++中UTC的当前时间,我在Ubuntu上.有一个简单的方法吗?

c++ linux ubuntu time utc

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

在 C++ 中将日期转换为 unix 时间戳

正如一些转换这些 un​​ix 时间戳的网站所说,

2013/05/07 05:01:00 (yyyy/mm/dd, hh:mm:ss) is 1367902860.
Run Code Online (Sandbox Code Playgroud)

我在 C++ 中的做法是,戳记与日期不同。这是代码:

time_t rawtime;
struct tm * timeinfo;

int year=2013, month=5, day=7, hour = 5, min = 1, sec = 0;

/* get current timeinfo: */
time ( &rawtime ); //or: rawtime = time(0);
/* convert to struct: */
timeinfo = localtime ( &rawtime ); 

/* now modify the timeinfo to the given date: */
timeinfo->tm_year   = year - 1900;
timeinfo->tm_mon    = month - 1;    //months since January - [0,11] …
Run Code Online (Sandbox Code Playgroud)

c++ unix timestamp

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

从 std::string 读取时间为 UTC 时间

在我的一个程序中,我必须多次阅读几种不同格式的内容。但在所有格式中,时间均以 UTC 给出(即不是我的本地时区)。对于采用日期字符串和格式字符串并输出时间戳的函数来说,最好的方法是什么std::time_t

目前我正在使用boost

#include "boost/date_time/gregorian/gregorian.hpp"
#include "boost/date_time/posix_time/posix_time.hpp"

std::time_t to_timestamp_utc(const std::string& _dateString) {
    using namespace boost::gregorian;
    using namespace boost::posix_time;
    return to_time_t(ptime(from_undelimited_string(_dateString)));
}
Run Code Online (Sandbox Code Playgroud)

但这仅适用于“YYYYMMDD”格式。std::get_time另一方面,标准库函数假定输入日期的格式为我的当地时间而不是 UTC(或者至少我还没有找到更改它的方法)。任何建议都是非常受欢迎的。

当前的解决方案基于 Maxim Egorushkin 建议。

std::time_t utc_to_timestamp(const std::string& _dateString, const std::string& _format) {
    // Set sec, min, hour to zero in case the format does not provide those
    std::tm timeStruct;
    timeStruct.tm_sec = 0;
    timeStruct.tm_min = 0;
    timeStruct.tm_hour = 0;
    char* const result = strptime(_dateString.c_str(), _format.c_str(), &timeStruct);
    // Throw exception if format did …
Run Code Online (Sandbox Code Playgroud)

c++ datetime boost c++14

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

时区之间的时间转换

我有一个可以在GMT中运行的服务器应用程序。我的应用程序与柏林时区的服务器通信,我不时从该服务器读取一些文件。我需要比较这些文件的时间。考虑到夏,冬时间的变化,如何将远程服务器时间从柏林时区转换为格林尼治标准时间?您知道boost.date_time提供的一些信息可以帮助我轻松地做到这一点吗?

我不是要从当地时间转换为格林尼治标准时间。我正在从特定时区转换为gmt。我需要有一个健壮的方法来在不同时区进行操作。

c++ time boost boost-date-time

0
推荐指数
1
解决办法
3977
查看次数

使用wget强制清除缓存

我正在尝试使用Windows 10命令提示符中的wget 从此Wikipedia页面(https://en.wikipedia.org/wiki/ISO_8601)中提取当前日期和时间。这是针对我正在开发的个人应用程序,因此与其尝试找出更复杂的c ++(仅我所知道的语言,几乎没有)将本地时间转换为UTC,然后为我的项目获取顺序日期,我只想下载带有wget的页面,并将我需要的信息细分为子字符串。该页面(刷新后)完全包含我需要的信息。我可以找到另一种方法来实现此目的,但是现在我将其个人化并尝试使其成为一种学习体验,因为它似乎应该很简单。

我在下面发布脚本,但是无论我做什么,使用wget时页面都不会刷新-除非我在浏览器中打开链接并清除缓存,否则页面将保持不变。下面的脚本不应该这样做吗?我尝试了--no-cache和--no-cookies,但是没有成功。打开chrome并转到此链接(https://en.wikipedia.org/w/index.php?title=ISO_8601&action=purge)并单击“清除”后,我始终可以立即使用wget,它可以正常工作。我只需要自动,无需手动刷新即可。

wget --no-check-certificate --no-cache --no-cookies https://en.wikipedia.org/wiki/ISO_8601
Run Code Online (Sandbox Code Playgroud)

windows command-line wget batch-file

0
推荐指数
1
解决办法
4063
查看次数