新网创想网站建设,新征程启航

为企业提供网站建设、域名注册、服务器等服务

go语言获取纳秒级时间,go获取当前时间的毫秒时间戳

linux实时时间 xtime怎么获取并使用

RTC时间操作:

创新互联是一家专业提供永胜企业网站建设,专注与成都做网站、成都网站制作、成都外贸网站建设HTML5、小程序制作等业务。10年已为永胜众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。

1.rtc时间是由rtc硬件控制的,所以在linux中想要修改和获取rtc时间就只能通过驱动的接口来获取和修改。

intrtc_test(void)

{

structrtc_timertc;

intfd=-1;

intret=-1;

fd=open("/dev/rtc0",O_RDWR);

if(fd0){

return-1;

}

ret=ioctl(fd,RTC_RD_TIME,rtc);

if(ret0){

return-1;

}

printf("\nCurrentRTCdata/timeis%d-%d-%d,%02d:%02d:%02d.\n",rtc.tm_mday,rtc.tm_mon+1,

rtc.tm_year+1900,rtc.tm_hour,rtc.tm_min,rtc.tm_sec);

ret=ioctl(fd,RTC_SET_TIME,rtc);

if(ret0){

return-1;

}

return0;

}

2.除了上面这种方式操作rtc时间以外,linux中也有一个命令可以简化rtc时间操作,hwclock,比如,可以通过system("hwclock-w");系统调用来把xtime设置到rtc硬件。

墙上时间(realtime、xtime):

linux系统中主要使用的就是xtime,它是系统运行的基础,很多程序都是依赖于xtime来运行的,接下来将介绍将如何操作xtime。

1.获取、设置微秒级别的时间:

#include

#include

structtimeval

{

inttv_sec;

inttv_usec;

};

intgettimeofday(structtimeval*tv,structtimezone*tz);

intsettimeofday(conststructtimeval*tv,conststructtimezone*gz);

功能描述:

gettimeofday()获取当前时间,有tv指向的结构体返回。

settimeofday()把当前时间设成由tv指向的结构体数据。当前地区信息则设成tz指向的结构体数据。

2.获取秒级别的时间

typedeflongtime_t;

time_ttime(time_t*t);

如果t是non-null,它将会把时间值填入t中

3.内核2.6版本后新增的clockapi接口

获取纳秒级别的时间

structtimespec{

time_ttv_sec;/*秒s*/

longtv_nsec;/*纳秒ns*/

};

intclock_getres(clockid_tclk_id,structtimespec*res);

intclock_gettime(clockid_tclk_id,structtimespec*tp);

intclock_settime(clockid_tclk_id、conststructtimespec*tp);

编译连接时采用-lrt才能编译通过。

clk_id可选参数:

CLOCK_REALTIME

系统全局的实时时钟.设置此时钟需要合适的权限.

CLOCK_MONOTONIC

只能被读取,无法被设置,表示monotonic时间起点.

CLOCK_PROCESS_CPUTIME_ID

从cpu每进程的高分辨率计时器.

CLOCK_THREAD_CPUTIME_ID

线程的特定cpu时间时钟.

系统启动时,会首先从rtc中读取rtc时间,并设置给xtime,而当ntp对系统时间进行更新时,首先设置xtime,然后调用hwclock设置到rtc硬件中。xtime根据需要的精度,可以通过上面几个接口来选择使用。

golang 获取时间精确能到纳秒吗

这样。不过只是个精确到纳秒的计时器,不是精确到纳秒的当前时间。windows好像只能拿到ms精度的当前时间吧,不是很清楚。

package main

import (

"syscall"

"time"

"unsafe"

)

func NewStopWatch() func() time.Duration {

var QPCTimer func() func() time.Duration

QPCTimer = func() func() time.Duration {

lib, _ := syscall.LoadLibrary("kernel32.dll")

qpc, _ := syscall.GetProcAddress(lib, "QueryPerformanceCounter")

qpf, _ := syscall.GetProcAddress(lib, "QueryPerformanceFrequency")

if qpc == 0 || qpf == 0 {

return nil

}

var freq, start uint64

syscall.Syscall(qpf, 1, uintptr(unsafe.Pointer(freq)), 0, 0)

syscall.Syscall(qpc, 1, uintptr(unsafe.Pointer(start)), 0, 0)

if freq = 0 {

return nil

}

freqns := float64(freq) / 1e9

return func() time.Duration {

var now uint64

syscall.Syscall(qpc, 1, uintptr(unsafe.Pointer(now)), 0, 0)

return time.Duration(float64(now-start) / freqns)

}

}

var StopWatch func() time.Duration

if StopWatch = QPCTimer(); StopWatch == nil {

// Fallback implementation

start := time.Now()

StopWatch = func() time.Duration { return time.Since(start) }

}

return StopWatch

}

func main() {

// Call a new stop watch to create one from this moment on.

watch := NewStopWatch()

// Do some stuff that takes time.

time.Sleep(1)

// Call the stop watch itself and it will return a time.Duration

dur := watch()

}

这和语言没关系,操作系统要提供这样的原语。linux和windows都是可以的。

c语言有办法取得当前纳秒或微秒级的时间吗

C语言获取当前系统时间的几种方式

C语言获取系统时间的几种方式

C语言中如何获取时间?精度如何?

1 使用time_t time( time_t * timer ) 精确到秒

2 使用clock_t clock() 得到的是CPU时间精确到1/CLOCKS_PER_SEC秒

3 计算时间差使用double difftime( time_t timer1, time_t timer0 )

4 使用DWORD GetTickCount() 精确到毫秒

5 如果使用MFC的CTime类,可以用CTime::GetCurrentTime() 精确到秒

6 要获取高精度时间,可以使用

BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)

获取系统的计数器的频率

BOOL QueryPerformanceCounter(LARGE_INTEGER

*lpPerformanceCount)

获取计数器的值

然后用两次计数器的差除以Frequency就得到时间。

7 Multimedia Timer Functions

The following functions are used with multimedia timers.

timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime


文章题目:go语言获取纳秒级时间,go获取当前时间的毫秒时间戳
本文路径:http://wjwzjz.com/article/hoossh.html
在线咨询
服务热线
服务热线:028-86922220
TOP