gpt4 book ai didi

c++ - 将 NTP 时间转换为人类可读时间

转载 作者:太空狗 更新时间:2023-10-29 22:52:56 25 4
gpt4 key购买 nike

我已经设法发出 NTP 请求并从它的 NTP 响应中检索服务器时间。我想将这个数字转换为人类可读的时间,用 C++ 编写。有人能帮我吗 ?例如,您可以查看: http://www.4webhelp.net/us/timestamp.php?action=stamp&stamp=771554255&timezone=0将时间戳设置为 771554255 后,您将获得“29/7/2010 13:14:32”。我想在我的代码中做同样的事情,有什么帮助吗?

最佳答案

这不是 C++,而是 perl 实现。将其转换为 C++ 应该没什么大不了的:

http://www.ntp.org/ntpfaq/NTP-s-related.htm#AEN6780

# usage: perl n2u.pl timestamp
# timestamp is either decimal: [0-9]+.?[0-9]*
# or hex: (0x)?[0-9]+.?(0x)?[0-9]*

# Seconds between 1900-01-01 and 1970-01-01
my $NTP2UNIX = (70 * 365 + 17) * 86400;

my $timestamp = shift;
die "Usage perl n2u.pl timestamp (with or without decimals)\n"
unless ($timestamp ne "");

my ($i, $f) = split(/\./, $timestamp, 2);
$f ||= 0;
if ($i =~ /^0x/) {
$i = oct($i);
$f = ($f =~ /^0x/) ? oct($f) / 2 ** 32 : "0.$f";
} else {
$i = int($i);
$f = $timestamp - $i;
}

my $t = $i - $NTP2UNIX;
while ($t < 0) {
$t += 65536.0 * 65536.0;
}

my ($year, $mon, $day, $h, $m, $s) = (gmtime($t))[5, 4, 3, 2, 1, 0];
$s += $f;

printf("%d-%02d-%02d %02d:%02d:%06.3f\n",
$year + 1900, $mon+1, $day, $h, $m, $s);

关于c++ - 将 NTP 时间转换为人类可读时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3362860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com