struct timeval tval; char tval_str[20]; gettimeofday(&tval, NULL); snprintf(tval_str, sizeof(tval_str), "%d", tval);改造这段C语言代码,在linux环境下,把时间转换成人类能看懂的方式
时间: 2024-03-10 20:45:08 浏览: 18
可以使用 `localtime()` 和 `strftime()` 函数将时间转换为人类可读的格式。可以这样修改代码:
```
#include <time.h>
struct timeval tval;
gettimeofday(&tval, NULL);
time_t now = tval.tv_sec;
struct tm *tm_info;
tm_info = localtime(&now);
char tval_str[20];
strftime(tval_str, sizeof(tval_str), "%Y-%m-%d %H:%M:%S", tm_info);
json_object_set_new(root, "time", json_string(tval_str));
```
这样就能将 `tval` 转换为人类可读的时间格式,并将其作为字符串存储到 `tval_str` 缓冲区中,再将其作为参数传入 `json_string()` 函数中了。其中 `%Y-%m-%d %H:%M:%S` 是时间格式字符串,可以根据需要进行修改。
相关问题
typedef struct { uint8_t path[128]; union { uint8_t val_s[256]; int64_t val_i; uint64_t val_u; double val_f; }; } paramer_struct; paramer_struct data_locktime; data_locktime = {"sys:uds/locktime="LONGLONG_UINT, .val_u=0xc0 };
这段代码定义了一个名为paramer_struct的结构体类型,包含一个128字节大小的路径数组和一个联合体。联合体可以存储不同类型的值,包括一个256字节大小的字符数组(val_s),一个64位有符号整数(val_i),一个64位无符号整数(val_u),以及一个双精度浮点数(val_f)。
然后,创建了一个名为data_locktime的paramer_struct类型的变量,并对其进行初始化。路径数组被赋值为"LONGLONG_UINT",而联合体中的val_u字段被赋值为0xc0。
请注意,我对你的代码进行了修正,将"LONGLONG_UINT"放在了双引号内部,以确保它是一个字符串字面量。
static int set_charger_type(void) { int ret; static int old_type_en = 0; union power_supply_propval val; struct power_supply *psy = power_supply_get_by_name("bbc"); if (psy == NULL) { pr_info("power_supply_get_by_name error.\n"); return -1; } val.intval = chr_type_en; pr_info("set_charger_type: %d.\n", val.intval); if (val.intval) { if (!old_type_en) { ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_ONLINE, &val); old_type_en = 1; } power_supply_changed(psy); val.intval = POWER_SUPPLY_TYPE_WIRELESS; ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val); if (!ret) { return val.intval; } else { return 0; } } else { val.intval = POWER_SUPPLY_TYPE_USB; ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val); if (ret < 0) pr_info("set chg psy failed\n"); power_supply_changed(psy); old_type_en = 0; } return 0; }将这段函数进行改写,使用dev_name(ddata->dev)来动态获取设备名称
static int set_charger_type(struct device *dev) {
int ret;
static int old_type_en = 0;
union power_supply_propval val;
struct power_supply *psy = power_supply_get_by_name(dev_name(dev));
if (psy == NULL) {
pr_info("power_supply_get_by_name error.\n");
return -1;
}
val.intval = chr_type_en;
pr_info("set_charger_type: %d.\n", val.intval);
if (val.intval) {
if (!old_type_en) {
ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_ONLINE, &val);
old_type_en = 1;
}
power_supply_changed(psy);
val.intval = POWER_SUPPLY_TYPE_WIRELESS;
ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val);
if (!ret) {
return val.intval;
} else {
return 0;
}
} else {
val.intval = POWER_SUPPLY_TYPE_USB;
ret = power_supply_set_property(psy, POWER_SUPPLY_PROP_TYPE, &val);
if (ret < 0)
pr_info("set chg psy failed\n");
power_supply_changed(psy);
old_type_en = 0;
}
return 0;
}