導航:首頁 > 操作系統 > linuxc獲取時區

linuxc獲取時區

發布時間:2023-03-24 11:08:44

A. linux下C語言獲得系統時間的方法

沒有完整程序, 不過能提供一點資料

int gettimeofday(struct timeval * tv,struct timezone *tz);
這個函數可以獲取當前時間, 貌似只要第一個結構體就行了

struct timeval
{
time_t tv_sec; //秒 [long int]
suseconds_t tv_usec; //微秒 [long int], (10E-6 second)
};
struct timeval
{
long tv_sec;
long tv_usec;
};

然後取微秒的前三位就是小數了, 之後把秒 tv_sec 轉化為 tm 格式, 參數用秒的指針就行

struct tm * gmtime(const time_t * t);
//轉換成格林威治時間。有時稱為GMT或UTC。
struct tm * localtime(const time_t *t);
//轉換成本地時間。它可以透過修改TZ環境變數來在一台機器中,不同使用者表示不同時間.

下面是tm的部分參數

int tm_sec; //tm_sec表「秒」數,在[0,61]之間,多出來的兩秒是用來處理跳秒問題用的。/* Seconds: 0-59 (K&R says 0-61?) */
int tm_min; //tm_min表「分」數,在[0,59]之間。
int tm_hour; //tm_hour表「時」數,在[0,23]之間。
int tm_mday; //tm_mday表「本月第幾日」,在[1,31]之間。
int tm_mon; //tm_mon表「本年第幾月」,在[0,11]之間。
int tm_year; //tm_year要加1900表示那一年。 /* /* 年份,其值從1900開始 */*/
int tm_wday; //tm_wday表「本周第幾日」,在[0,6]之間。 /* Days since Sunday (0-6) */ /*其中0代表星期天,1代表星期一,以此類推 */
int tm_yday; //tm_yday表「本年第幾日」,在[0,365]之間,閏年有366日。 /*其中0代表1月1日,1代表1月2日,以此類推 */*/
int tm_isdst; //tm_isdst表是否為「日光節約時間」

------------------------------華麗麗的分割線--------------------------------------------------
由於很長時間沒編程了, 也沒有Linux環境, 我就簡單寫幾行代碼, 僅作參考

#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include<unistd.h>
//這四個不一定夠用了

struct timeval tv;
struct timezone tz;
struct tm * p_tm;
//變數沒有初始化習慣不好,不要學

gettimeofday(&tv, &tz);
p_tm = gmtime( (const time_t *)&tv.tv_sec );

字元串的組裝尤其格式問題自己解決吧
年 p_tm->tm_year+ 1900
月 p_tm->tm_mon+ 1
日 p_tm->tm_mday
時 p_tm->tm_hour+ 1
分 p_tm->tm_min+ 1
秒 p_tm->tm_sec+ 1
小數點後面的部分,注意不夠三位還是前面填充0 tv.tv_sec/1000

B. linux怎麼用c獲取當前時間

Linux C編程獲取當前時間用time這個函數,time函數會返回一個time_t類型的時間戳(這個time_t類型實際上是一個長整型,定義在time.h頭文件中)。time函數的函數原型是這樣的:
time_t time(time_t *tloc);
使用time函數需要包含time.h頭文件:
#include <time.h>
調用time函數的代碼是這樣的:
time_t t;
t=time((time_t *) 0);
因為time函數參數的作用和返回值一樣,只是用於接收時間戳,所以這里調用time函數可以傳入一個空指針,表示只用它的返回值,不用指針參數來接收時間戳。
因為time函數只是返回一個時間戳,如果想列印直觀的時間信息,可以把剛才的time_t作為參數調用ctime函數,ctime函數會返回一個字元串,ctime函數的調用是這樣的:
printf("The time and date is: %s", ctime(&t));
t就是剛才調用time函數返回的time_t類型變數。

C. linux查看系統時區命令

顯示 /etc/timezone 的內容

使用 cat 工具顯示文件/etc/timezone的內容,來查看你的時區:

$ cat /etc/timezone

在 Linux 中查看時區《Linux就該這么學》

對於 RHEL/CentOS/Fedora 用戶,這里還有一條可以起到同樣效果的命令:

$ grep ZONE /etc/sysconfig/clock

D. 如何將linux 的本地時間設置為utc時間

如果你的 Linux 系統時區配置不正確,必需要手動調整到正確的當地時區。NTP 對時間的同步處理只計算當地時間與 UTC 時間的偏移量,因此配置一個 NTP 對時間進行同步並不能解決時區不正確的問題。所以大家在用了國外雲計算服務商如 Microsoft Azure 或其它 VPS、虛擬機時,需要注意是否與中國大陸的時區一致。

查看Linux當前時區
你可以使用如下命令非常容易地就查看到 linux 系統的當前時區:

date
ls -l /etc/localtime
linux-time02

獲取時區TZ值
要更改 Linux 系統時區首先得獲知你所當地時區的 TZ 值,使用 tzselect 命令即可查看並選擇已安裝的時區文件。

執行 tzselect 命令
linux-time03

通過向導選擇你所在大洲、國家和城市
tzselect 最終將以 Posix TZ 格式(例如 Asia/Shanghai)輸出你所在的時區值,將此記錄下來。
linux-time03

更改每個用戶的時區
Linux 用戶一個多用戶系統,每個用戶都可以配置自己所需的時區,你可以為自己新增一個 TZ 環境變數:

export TZ='Asia/Shanghai'
執行完成之後需要重新登錄系統或刷新 ~/.bashrc 生效。

source ~/.bashrc
更改Linux系統時區
要更改 Linux 系統整個系統范圍的時區可以使用如下命令:

sudo rm -f /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
注意:/usr/share/zoneinfo/Asia/Shanghai 中的具體時區請用自己獲取到的 TZ 值進行替換。
使用Systemd更改Linux系統時區
如果你使用的 Linux 系統使用 Systemd,還可以使用 timedatectl 命令來更改 Linux 系統范圍的時區。在 Systemd 下有一個名為 systemd-timedated 的系統服務負責調整系統時鍾和時區,我們可以使用 timedatectl 命令對此系統服務進行配置。

sudo timedatectl set-timezone 'Asia/Shanghai'
linux-time05

最後,如果你發現 Ubuntu 與 Windows 雙系統時間不同步,可以參考我們之前的文章說明和解決辦法。

E. 在LINUX下用C++編程,如何獲取系統當前的時間。

//方案— 優點:僅使用C標准庫;缺點:只能精確到秒級
#include <time.h>
#include <stdio.h>
int main( void )
{
time_t t = time(0);
char tmp[64];
strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) );
puts( tmp );
return 0;
}
size_t strftime(char *strDest, size_t maxsize, const char *format, const struct tm *timeptr);
根據格式字元串生成字元串。
struct tm *localtime(const time_t *timer);
取得當地時間,localtime獲取的結果由結構tm返回
返回的字元串可以依下列的格式而定:
%a 星期幾的縮寫。Eg:Tue
%A 星期幾的全名。 Eg: Tuesday
%b 月份名稱的縮寫。
%B 月份名稱的全名。
%c 本地端日期時間較佳表示字元串。
%d 用數字表示本月的第幾天 (范圍為 00 至 31)。日期
%H 用 24 小時制數字表示小時數 (范圍為 00 至 23)。
%I 用 12 小時制數字表示小時數 (范圍為 01 至 12)。
%j 以數字表示當年度的第幾天 (范圍為 001 至 366)。
%m 月份的數字 (范圍由 1 至 12)。
%M 分鍾。
%p 以 ''AM'' 或 ''PM'' 表示本地端時間。
%S 秒數。
%U 數字表示為本年度的第幾周,第一個星期由第一個周日開始。
%W 數字表示為本年度的第幾周,第一個星期由第一個周一開始。
%w 用數字表示本周的第幾天 ( 0 為周日)。
%x 不含時間的日期表示法。
%X 不含日期的時間表示法。 Eg: 15:26:30
%y 二位數字表示年份 (范圍由 00 至 99)。
%Y 完整的年份數字表示,即四位數。 Eg:2008
%Z(%z) 時區或名稱縮寫。Eg:中國標准時間
%% % 字元。

//方案二 優點:能精確到毫秒級;缺點:使用了windows API
#include <windows.h>
#include <stdio.h>
int main( void )
{
SYSTEMTIME sys;
GetLocalTime( &sys );
printf( "%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek);
return 0;
}

//方案三,優點:利用系統函數,還能修改系統時間
//此文件必須是c++文件
#include<stdlib.h>
#include<iostream>
using namespace std;
void main()
{
system("time");
}

//方案四,將當前時間折算為秒級,再通過相應的時間換算即可
//此文件必須是c++文件
#include<iostream>
#include<ctime>
using namespace std;
int main()
{
time_t now_time;
now_time = time(NULL);
cout<<now_time;
return 0;
}

F. Linux中如何查看修改系統的時間和時區

一、查看和修改Linux的時區
1. 查看當前時區
命令 : "date -R"
2. 修改設置Linux伺服器時區
方法 A
命令 : "tzselect"
方法 B 僅限於RedHat Linux 和 CentOS
命令 : "timeconfig"
方法 C 適用於Debian
命令 : "dpkg-reconfigure tzdata"
3. 復制相應的時區文件,替換系統時區文件;或者創建鏈接文件
cp /usr/share/zoneinfo/主時區/主時區/次時區 /etc/localtime
例如:在設置中國時區使用亞洲/上海(+8)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
二、查看和修改Linux的時間
1. 查看時間和日期
命令 : "date"
2.設置時間和日期
例如:將系統日期設定成2009年11月3日的命令
命令 : "date -s 11/03/2009"
將系統時間設定成下午5點55分55秒的命令
命令 : "date -s 17:55:55"
3. 將當前時間和日期寫入BIOS,避免重啟後失效
命令 : "hwclock -w"
註:
date
不加參數可以直接看到當前日期時間
cal
不加參數可以直接看到本月月歷 命令使用可查看「Linux命令大全」

G. linux 查看各個時區

date -u 中的u是date的一個參數,固定表示格林威治時間
你要想查看全部時區,就去 /usr/share/zoneinfo/ 目錄
例如:ls /usr/share/zoneinfo/Asia/
可顯示全部的亞洲時區。

H. linux C 獲取時間以及計算時間差

可以用time()系統調用來獲取系統時間,然後減去之前記錄的時間就得到了時間差

閱讀全文

與linuxc獲取時區相關的資料

熱點內容
android模態對話框 瀏覽:793
手機為什麼無法接到伺服器 瀏覽:627
背景虛化人物清晰哪個app 瀏覽:657
android開發職位 瀏覽:764
勒索病毒加密文件特徵識別 瀏覽:815
小車控制源碼 瀏覽:9
程序員右手筋脈疼痛沒力 瀏覽:841
手機視頻太大如何壓縮 瀏覽:555
出租伺服器怎麼用 瀏覽:229
鬼六所有的電影 瀏覽:968
java集成spring 瀏覽:352
壯熊警察李鐵峰小說 瀏覽:731
幕川北玩的什麼伺服器 瀏覽:475
男主有病需要喝奶的小說 瀏覽:214
ftp傳文件命令 瀏覽:625
small壓縮 瀏覽:878
小白楊小說完整版免費 瀏覽:914
一本女主叫顧念的小說 瀏覽:155
成人亂小說短篇小說 瀏覽:424
可編程式控制制器輸出開關量介面類型 瀏覽:66