在MacOSX中的時間操作

2021-10-03 21:06:39 字數 4790 閱讀 9164

1、nsdate、nsdateformatter獲取時間

獲取到毫秒時間戳

nsstring* datestring;

nsdateformatter * formatter = [[nsdateformatter alloc ] init];

[formatter setdateformat:@"yyyy/mm/dd hh:mm:ss.sss"];

//年/月/日 時/分/秒.毫秒

datestring = [formatter stringfromdate:[nsdate date]];

2、nsdate、nscalendar獲取時間

獲取到納秒時間戳

nsinteger era,year,month,day,hour,minute,second,nanosecond;

// 時區、年、月、日、時、分、秒、納秒

nsdate *date = [nsdate date];

nscalendar *localcalendar = [nscalendar currentcalendar];

[localcalendar getera:&era year:&year month:&month day:&day fromdate:date];

[localcalendar gethour:&hour minute:&minute second:&second nanosecond:&nanosecond fromdate:date];

3、獲取時間

獲取到微秒時間

struct timeval tv;

struct timezone tz;

struct tm *p;

gettimeofday(&tv, &tz);

p = localtime(&tv.tv_sec);

//年 p->tm_year+1900

//月 p->tm_mon+1

//日 p->tm_mday

//時 p->tm_hour+1

//分 p->tm_min

//秒 p->tm_sec

//微秒 tv.tv_usec

//星期 p->wday+1

//年天 p->yday

資料結構的定義: 

_struct_timeval ;

struct tm ;

int gettimeofday(struct timeval * __restrict, void * __restrict);

struct tm *localtime(const time_t *);

struct timezone ;

4、

計算乙個**段執行耗時(納秒)

mach_timebase_info_data_t info;  

if (mach_timebase_info(&info) != kern_success) return -1.0;

uint64_t start = mach_absolute_time ();

block ();

uint64_t end = mach_absolute_time ();

uint64_t elapsed = end - start;

uint64_t nanos = elapsed * info.numer / info.denom;

//納秒時間

5、nsdate獲取1970的時間

nstimeinterval本身是個秒級別的double型別數值,小數點後面即毫秒數,*1000.0f即可得到毫秒級別的時間差

nstimeinterval time = [[nsdate date] timeintervalsince1970]
輸出結果示例:1584162491.226890,一定程度上來說小數點後的資料*1000之後,能夠獲取到us時間,不過精度沒有那麼高

6、nsprocessinfo

通過nsprocessinfo獲取到程序啟動的時間(807539.047739秒) 和 程序的其它相關資訊

nsprocessinfo *processinfo = [nsprocessinfo processinfo];

nslog(@"environment:%@",processinfo.environment);

//程序執行環境,乙個字典

nslog(@"arguments:%@",processinfo.arguments);

//獲取程序開啟的時候,傳入的命令列引數資訊,是乙個引數陣列

nslog(@"hostname:%@",processinfo.hostname);

//主機名 jerry.local

processinfo.processname = @"custom_process_name";

//設定程序名稱

nslog(@"processname:%@",processinfo.processname);

//程序名稱 custom_process_name

nslog(@"processidentifier:%d",processinfo.processidentifier);

//程序id 51851

nslog(@"globallyuniquestring:%@",processinfo.globallyuniquestring);

//全球唯一碼,程序每啟動一次,生成的globallyuniquestring都不一樣

//2b5608d4-ef1c-437b-ace8-73bfa9e4e85f-51851-0002de73d5d87b88

nslog(@"operatingsystemversionstring:%@",processinfo.operatingsystemversionstring);

//獲取執行當前程序的裝置的作業系統的版本號字串,version 10.14.5 (build 18f203)

nslog(@"operatingsystemversion.majorversion:%ld",processinfo.operatingsystemversion.majorversion);

//10

nslog(@"operatingsystemversion.minorversion:%ld",processinfo.operatingsystemversion.minorversion);

//14

nslog(@"operatingsystemversion.patchversion:%ld",processinfo.operatingsystemversion.patchversion);

//5nslog(@"systemuptime:%f",processinfo.systemuptime);

//獲取系統啟動的時間,單位是秒 807539.047739

nslog(@"lowpowermodeenabled:%d",processinfo.lowpowermodeenabled);

//得到的是乙個布林值的結果:yes:開啟了低電量模式,no:未開啟低電量模式,僅對ios有用

environment和arguments詳細資訊

arguments:(

"/users/jerry/xcodeproj/testoc/build/debug/testoc")

7、 獲取系統啟動時間

kernel_task是個系統級的task,包括多執行緒排程管理、虛擬記憶體、系統io、執行緒之間通訊等等,所以系統已啟動,kernel_task就會跑起來,kernel_task執行的時間,就可以作為啟動時間來使用。

sysctl函式用於獲取kernel_task的資訊,函式返回值:成功:返回0; 失敗:返回-1

struct timeval boottime;

int mib[2] = ;

size_t size = sizeof(boottime);

time_t now;

time_t uptime = -1;

(void)time(&now);

if (sysctl(mib, 2, &boottime, &size, null, 0) != -1 && boottime.tv_sec != 0)

#include

#include

int  sysctl( int *name, u_int namelen, void *oldp, size_t *oldenp, void *newp, size_t newlen );

返回0:成功   -1:失敗

name引數是指定名字的乙個整數陣列,namelen引數指定了該陣列中的元素數目。該陣列

中的第乙個元素指定本請求定向到核心的哪個子系統。第二個及其後元素依次細化指定該系

統的某個部分。

為了獲取某個值,oldp引數指向乙個供核心存放該值的緩衝區。oldlenp則是乙個值-結果參

數:函式被呼叫時,oldlenp指向的值指定該緩衝區的大小;函式返回時,該值給出核心存

放在該緩衝區中的資料量。如果這個緩衝不夠大,函式就返回enomem錯誤。作為特例,

oldp可以是乙個空指標,而oldlenp卻是乙個非空指標,核心確定這樣的呼叫應該返回的資料量,並通過oldlenp返回這個大小。

為了設定某個新值,newp引數指向乙個大小為newlen引數值的緩衝區。如果不準備指定一

個新值,那麼newp應為乙個空指標,newlen因為0.

在mac OSX中安裝啟動zookeeper

zookeeper支援brew安裝,檢查安裝環境 brew install zookeeper安裝後zookeeper配置檔案位置 3 引數詳解 clientport 客戶端連線server的埠,即對外服務埠,一般設定為2181吧。ticktime 2000 initlimit 10 synclim...

Mac OSX在terminal中連線samba

開發環境為mac vmware ubuntu,看 提交 在mac上進行,編譯在ubuntu上。因此需要在cl中方便地訪問 將samba共享目錄掛載到mac中到某個位置。首先想到到是 home user source dev 不過掛載到使用者目錄會出現問題,後文將詳細介紹。命令如下 1.建立新目錄,使...

讓PHP跑在Mac OS X中

macbook入手了,配置工作環境,首先得讓mac os支援php。不管你是採用整合的開發環境,比如xampp for mac os x,還是採用mac os中自帶的apache和php,甚至自己重新編譯安裝,減少麻煩的第一步就是啟用root使用者。本文採用的方式是使用mac os x 10.5.6...