DateTime结构体与字符串相互转换的代码实现

  • 问题描述

自定义一个DateTime结构体,代码如下:

//定义DateTime结构体
struct DateTime
{
	short year;
	short month;
	short day;
	short hour;
	short minute;
	short second;
};

如何将DateTime对象转换成形如“YYYY-MM-DD hh:mm:ss”的字符串格式,或者用该字符串来给DateTime对象赋值,以方便比较时间。

  • 解决方案

定义一个转换函数,将字符串转换为DateTime结构体,代码如下:

//接受3个参数,分别为字符串首地址,起始位置,计算长度
short SubStringToShort(const char *str, int begin, int len)
{
	int res = 0;
	for (int i = begin; i < begin+len; ++i)
	{
		int tmp = str[i] - '0';	//将字符型转化为整型
		res *= 10;
		res += tmp;
	}
	return (short)res;
}


//将字符串转换为DateTime结构体
DateTime *StringToDateTime(const char *str)
{
	DateTime *dt = new DateTime();

	//字符串必须符合特定格式(YYYY-MM-DD hh:mm:ss)
	int len = strlen(str);
	if (len != 19)
	{
		cout << "Invalid time string: " << str << endl;
		return nullptr;
	}
	//给year成员赋值
	short *p = (short *)dt + 1;
	dt->year = SubStringToShort(str, 0, 4);
	for (int i = 0; i < 5; ++i)
	{
		//给DateTime剩余的成员赋值,以short指针类型后移来获取成员内存地址
		*(p+i) = SubStringToShort(str, 5+i*3, 2);
	}

	return dt;
}

将DateTime结构体转换为字符串,代码如下:

//将DateTime结构体转换为字符串
char *DateTimeToString(const DateTime *dt)
{
	char *str = new char[19];
	//使用sprintf库函数,格式化字符串,注意格式控制符的使用
	sprintf(str, "%04d-%02d-%02d %02d:%02d:%02d", dt->year, dt->month, dt->day, 
		dt->hour, dt->minute, dt->second);
	return str;	
}
  • 总结

本解决方案较为简单,需要特定的字符串格式方可。

通常情况下,本例中的DateTime结构体因成员变量均为short类型,故依次在内存中排序方式从低字节向高字节进行,就可以使用short指针递增的方式来获取各个成员变量的地址,并进行赋值。

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值