相关疑难解决方法(0)

std :: mktime和时区信息

我正在尝试将我认为是UTC字符串的时间信息转换为std::mktime在C++中使用的时间戳.我的问题是,<ctime>/ <time.h>没有转换为UTC的功能; mktime只会将时间戳作为本地时间返回.

所以我需要弄清楚时区偏移量并将其考虑在内,但我找不到与平台无关的方法,不涉及将整个代码移植到boost::date_time.有一些我忽略的简单解决方案吗?

c++

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

ASN1_TIME到time_t的转换

我怎样才能转换ASN1_TIME成time_t格式?我想将返回值转换X509_get_notAfter()为秒.

openssl asn.1 ssl-certificate

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

timegm跨平台

我正在使用Visual Studio c ++ Compiler(2010),但该库具有不同的ANSI C和POSIX库函数的实现.

ANSI C函数和Windows CRT实现有什么区别?例如tzset()和/ _tzset()或setenv()ans有_setenv()什么区别?似乎以同样的方式做同样的事情......

我正在使用msvc(2010),我是否更喜欢Windows CRT实现?

编辑1

好吧,我希望以可移植的方式转换一个以UTC表示的结构tm time_t,但是没有可移植的方法来做到这一点.我要为不同的平台(Android,Linux,Windows,Windows CE)编写功能.

我已经看过这个使用的stackoverflow帖子setenv,getenv和tzset

EDIT2

不幸的是,经过一些测试,我发现getenv("TZ")在Windows上返回一个空指针.但为什么如此困难将UTC时间结构转换为time_t?

编辑3

从Boost中我发现了boost/chrono/io/time_point_io.hpp中的这段代码.希望这对我有所帮助.

inline int32_t is_leap(int32_t year)
{
  if(year % 400 == 0)
  return 1;
  if(year % 100 == 0)
  return 0;
  if(year % 4 == 0)
  return 1;
  return 0;
}
inline int32_t days_from_0(int32_t year)
{
  year--;
  return 365 * year …
Run Code Online (Sandbox Code Playgroud)

c++ crt msvcrt visual-c++

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

从编译时已知的日历日期创建`std :: chrono :: time_point`

此答案显示了如何将字符串解析为std::chrono::time_point,如下所示:

std::tm tm = {};
std::stringstream ss("Jan 9 2014 12:35:34");
ss >> std::get_time(&tm, "%b %d %Y %H:%M:%S");
auto tp = std::chrono::system_clock::from_time_t(std::mktime(&tm));
Run Code Online (Sandbox Code Playgroud)

如果我想std::chrono::time_point从一个(Gregorian)日历日期创建一个在编译时就知道其年,月和日的日历日期,是否有比上述字符串解析更简单的方法呢?

c++ c++-chrono c++14

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

标签 统计

c++ ×3

asn.1 ×1

c++-chrono ×1

c++14 ×1

crt ×1

msvcrt ×1

openssl ×1

ssl-certificate ×1

visual-c++ ×1