#include <jni.h>
#include <string>
#include <stdio.h>
#include <sys/sysinfo.h>
#include <time.h>
#include <errno.h>
#include <stdlib.h>
int getBootTimeAlarm();
extern "C" JNIEXPORT jstring JNICALL
Java_com_android_cpptest_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
int startMSCount;//从开机到现在的毫秒数
startMSCount = getBootTimeAlarm();
time_t CurSysTime, BootSysTime;
time(&CurSysTime);
//将开机到现在的毫秒数转换为秒数,再用当前的时间减去,获得开机时间
BootSysTime = CurSysTime - startMSCount / 1000;
struct tm* tm_boot;
tm_boot = localtime(&BootSysTime);
char bufbt[128] = { 0 };
strftime(bufbt, 64, "%Y-%m-%d %H:%M:%S", tm_boot);
return env->NewStringUTF(bufbt);
}
int getBootTimeAlarm() {
timespec ts{};
if (clock_gettime(CLOCK_BOOTTIME_ALARM, &ts) == 0) {
return ts.tv_sec * 1000 + ts.tv_nsec / 1000000; // 转换为毫秒
} else {
return -1; // 出错返回-1
}
}
C语言获取设备开机时间
于 2023-11-03 16:18:37 首次发布