最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++標(biāo)準(zhǔn)庫(kù)之轉(zhuǎn)換UTC時(shí)間到local本地時(shí)間詳解

 更新時(shí)間:2017年11月22日 08:39:18   作者:infoworld  
最近遇到一個(gè)問(wèn)題:數(shù)據(jù)庫(kù)中存放的時(shí)間為UTC時(shí)間,但是現(xiàn)在要求都出來(lái)顯示的時(shí)間為本地時(shí)間,所以就用C++實(shí)現(xiàn)了,下面這篇文章主要給大家介紹了關(guān)于C/C++標(biāo)準(zhǔn)庫(kù)之轉(zhuǎn)換UTC時(shí)間到local本地時(shí)間的方法,還有C++中獲取UTC時(shí)間精確到微秒的實(shí)現(xiàn)代碼,需要的朋友可以參考下。

前言

UTC 時(shí)間DateTime.UtcNow 和 系統(tǒng)本地時(shí)間 DateTime.Now 相差8個(gè)時(shí)區(qū) ,美國(guó)本地時(shí)間和北京時(shí)間相差15個(gè)時(shí)區(qū): 美國(guó),而一般使用UTC時(shí)間方便統(tǒng)一各地區(qū)時(shí)間差異。

場(chǎng)景

      1.如果有面向全球用戶的網(wǎng)站, 一般在存儲(chǔ)時(shí)間數(shù)據(jù)時(shí)存儲(chǔ)的是UTC格式的時(shí)間, 這樣時(shí)間是統(tǒng)一的, 并可以根據(jù)當(dāng)?shù)貢r(shí)區(qū)來(lái)進(jìn)行準(zhǔn)確的轉(zhuǎn)換.

      2.存儲(chǔ)本地時(shí)間的問(wèn)題就在于如果換了時(shí)區(qū), 那么顯示的時(shí)間并不正確. 所以我們存儲(chǔ)時(shí)間時(shí)最好還是存儲(chǔ)UTC時(shí)間,便于正確的轉(zhuǎn)換.

說(shuō)明

1.C/C++標(biāo)準(zhǔn)庫(kù)提供了標(biāo)準(zhǔn)函數(shù)可以轉(zhuǎn)換, 不需要借助Win32 API.

例子

// test_datetime_format.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
//

#include "stdafx.h"
#include <time.h>
#include <sstream>
#include <iostream>
#include <assert.h>

//2014-09-13T10:52:36Z
//2014-09-13 10:52:36
char* ConvertUtcToLocalTime(struct tm* t2,const char* date){

 struct tm t;
 memset(&t,0,sizeof(t));
 t.tm_year = atoi(date)-1900;
 t.tm_mon = atoi(date+5)-1;
 t.tm_mday = atoi(date+8);
 t.tm_hour = atoi(date+11);
 t.tm_min = atoi(date+14);
 t.tm_sec = atoi(date+17);

 time_t tt = _mkgmtime64(&t);
 if(tt != -1){
 if(t2 == NULL){
  t2 = &t; 
 }
 *t2 = *localtime(&tt);
 char* ds = (char*) malloc(24);
 memset(ds, 0, 24);
 sprintf(ds, "%.4d-%.2d-%.2d %.2d:%.2d:%.2d", t2->tm_year + 1900,
  t2->tm_mon + 1, t2->tm_mday, t2->tm_hour, t2->tm_min,
  t2->tm_sec);
 return ds;
 }
 return NULL;
}


//https://www.w3.org/TR/NOTE-datetime
//https://msdn.microsoft.com/en-us/library/2093ets1.aspx
//2014-09-13T10:52:36Z
int _tmain(int argc, _TCHAR* argv[])
{
 const char* kTime = "2014-09-13 18:52:36";
 std::cout << "Source DateTime: " << "2014-09-13T10:52:36Z" << std::endl;
 auto t = ConvertUtcToLocalTime(NULL,"2014-09-13T10:52:36Z");
 std::cout << "Dest DateTime: " << t << std::endl;
 assert(!strcmp(t,kTime));

 t = ConvertUtcToLocalTime(NULL,"2014-09-13 10:52:36");
 std::cout << t << std::endl;
 assert(!strcmp(t,kTime));

 struct tm tt;
 t = ConvertUtcToLocalTime(&tt,"2014-09-13 10:52:36");
 std::cout << t << std::endl;
 assert(!strcmp(t,kTime));
 assert(tt.tm_year == (2014-1900));
 assert(tt.tm_mon == 9-1);
 assert(tt.tm_mday == 13);
 assert(tt.tm_hour == 18);
 assert(tt.tm_min == 52);
 assert(tt.tm_sec == 36);

 return 0;
}


}

輸出

Source DateTime: 2014-09-13T10:52:36Z
Dest DateTime: 2014-09-13 18:52:36
2014-09-13 18:52:36
2014-09-13 18:52:36

C++中獲取UTC時(shí)間精確到微秒的實(shí)現(xiàn)代碼

在日常開(kāi)發(fā)過(guò)程中經(jīng)常會(huì)使用到時(shí)間類(lèi)函數(shù)的統(tǒng)計(jì),其中獲取1970年至今的UTC時(shí)間是比較常使用的,但是在windows下沒(méi)有直接能夠精確到微妙級(jí)的函數(shù)可用。本文提供方法正好可以解決這類(lèi)需求問(wèn)題。

下面先給出C++實(shí)現(xiàn)代碼:

代碼如下:

#ifndef UTC_TIME_STAMP_H_
#define UTC_TIME_STAMP_H_

#include <windows.h>
#include <sys/timeb.h>
#include <time.h> 

#if !defined(_WINSOCK2API_) && !defined(_WINSOCKAPI_)
struct timeval
{
long tv_sec;
long tv_usec;
};
#endif

static int gettimeofday(struct timeval* tv)
{
 union {
    long long ns100;
    FILETIME ft;
 } now;
 GetSystemTimeAsFileTime (&now.ft);
 tv->tv_usec = (long) ((now.ns100 / 10LL) % 1000000LL);
 tv->tv_sec = (long) ((now.ns100 - 116444736000000000LL) / 10000000LL);

 return (0);
}
//獲取1970年至今UTC的微妙數(shù)
static time_t TimeConversion::GetUtcCaressing()
{
 timeval tv;
 gettimeofday(&tv); 
 return ((time_t)tv.tv_sec*(time_t)1000000+tv.tv_usec);
}
#endif

接下來(lái)給出使用方法:

timeval tv;
gettimeofday(&tv); 

或者直接調(diào)用:GetUtcCaressing();

UTC時(shí)間秒級(jí)UTC獲取方法代碼:

time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
timep = mktime(p);
printf("%d\n",timep); 

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

參考

相關(guān)文章

  • c++將字符串轉(zhuǎn)數(shù)字的實(shí)例方法

    c++將字符串轉(zhuǎn)數(shù)字的實(shí)例方法

    在本篇文章里小編給大家整理的是關(guān)于c++將字符串轉(zhuǎn)數(shù)字的實(shí)例方法,有需要的朋友們可以參考下。
    2020-02-02
  • C++線程間的互斥和通信場(chǎng)景分析

    C++線程間的互斥和通信場(chǎng)景分析

    很多朋友對(duì)C++線程間的互斥和通信知識(shí)掌握不是多牢靠,今天小編通過(guò)模擬車(chē)站賣(mài)票應(yīng)用場(chǎng)景給大家詳細(xì)解析C++線程間的互斥和通信知識(shí),感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • C語(yǔ)言實(shí)現(xiàn)貪吃蛇代碼

    C語(yǔ)言實(shí)現(xiàn)貪吃蛇代碼

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)貪吃蛇代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • QT實(shí)現(xiàn)C++數(shù)據(jù)類(lèi)與json轉(zhuǎn)換

    QT實(shí)現(xiàn)C++數(shù)據(jù)類(lèi)與json轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了如何使用QT實(shí)現(xiàn)C++數(shù)據(jù)類(lèi)與json轉(zhuǎn)換,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • C語(yǔ)言中數(shù)據(jù)結(jié)構(gòu)之鏈?zhǔn)交鶖?shù)排序

    C語(yǔ)言中數(shù)據(jù)結(jié)構(gòu)之鏈?zhǔn)交鶖?shù)排序

    這篇文章主要介紹了C語(yǔ)言中數(shù)據(jù)結(jié)構(gòu)之鏈?zhǔn)交鶖?shù)排序的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • C語(yǔ)言實(shí)現(xiàn)2048游戲

    C語(yǔ)言實(shí)現(xiàn)2048游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)2048小游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C語(yǔ)言實(shí)現(xiàn)在控制臺(tái)打印余弦曲線

    C語(yǔ)言實(shí)現(xiàn)在控制臺(tái)打印余弦曲線

    余弦曲線又叫余弦波(cosinwave),是一種來(lái)自數(shù)學(xué)三角函數(shù)中的余弦比例的曲線。這篇文章主要為大家介紹了如何在控制臺(tái)繪制余弦曲線,感興趣的可以了解一下
    2023-02-02
  • C++獲取數(shù)組大小和多維數(shù)組操作詳解

    C++獲取數(shù)組大小和多維數(shù)組操作詳解

    這篇文章主要介紹了C++獲取數(shù)組大小和多維數(shù)組的操作,文中通過(guò)代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-04-04
  • VSCode Linux的C++代碼格式化配置的實(shí)現(xiàn)

    VSCode Linux的C++代碼格式化配置的實(shí)現(xiàn)

    動(dòng)格式化代碼容易出現(xiàn)錯(cuò)誤,特別是當(dāng)代碼量較大時(shí),使用自動(dòng)格式化可以減少這種錯(cuò)誤的風(fēng)險(xiǎn),本文主要介紹了VSCode Linux的C++代碼格式化配置的實(shí)現(xiàn),感興趣的可以了解一下
    2023-10-10
  • C++ Boost命令行解析庫(kù)的應(yīng)用詳解

    C++ Boost命令行解析庫(kù)的應(yīng)用詳解

    命令行解析庫(kù)是一種用于簡(jiǎn)化處理命令行參數(shù)的工具,它可以幫助開(kāi)發(fā)者更方便地解析命令行參數(shù)并提供適當(dāng)?shù)膸椭畔?本文主要介紹了不同的命令行解析庫(kù)和它們?cè)贑++項(xiàng)目中的應(yīng)用,希望對(duì)大家有所幫助
    2023-11-11

最新評(píng)論

康马县| 黄龙县| 武清区| 靖边县| 肇源县| 盈江县| 土默特左旗| 淮安市| 新绛县| 赞皇县| 东山县| 内黄县| 临沭县| 龙门县| 曲靖市| 临猗县| 曲阳县| 海兴县| 宜兰市| 原平市| 景谷| 屏南县| 滕州市| 博爱县| 江安县| 永昌县| 遂平县| 西城区| 镇坪县| 新余市| 临西县| 宁陵县| 安义县| 商洛市| 鄂托克前旗| 庄河市| 聂荣县| 宝山区| 海南省| 沅江市| 华池县|