问题描述
|
我有一个YYYYMMDDHHMMSS格式的ѭ0。
例如2011052504572
我想从此字符中检索年,月,日,时,分和秒。我怎么做?
注意:我不能使用任何第三方dll。
谢谢,
赛德
解决方法
为此使用1ѭ。例,
string date = \"20110524112233\";
string year = date.substr(0,4);
string month = date.substr(4,2);
string day = date.substr(6,2);
string hour = date.substr(8,2);
string minute = date.substr(10,2);
string second = date.substr(12,2);
,如果您使用的是STL,则只需将字符串放入std :: string并使用substr方法:
std::string dateTime=......;
std::string year=dateTime.substr(0,4);
std::string month=dateTime.substr(4,2);
// etc
// etc
,这取决于您要将值提取为文本还是将其转换为数字。要获得很多琴弦,可以使用std::string
和substr()
,如其他答案中所述。
如果要获取可以用来计算的数字,则一种方法是:
int year,month,day,hour,minute,second;
if (sscanf(input,\"%.4d%.2d%.2d%.2d%.2d%.2d\",&year,&month,&day,&hour,&minute,&second) == 6)
{
// all 6 conversions worked... can use the values...
int second_in_day = hour * 3600 + minute * 60 + second;
...
}
另一种方法是使用strptime()
-如果您的系统具有它。它将字符串解析为分解时间结构:
struct tm tm;
strptime(input,\"%Y%m%d%H%M%S\",&tm);
// parsed values are in tm.tm_year,tm.tm_mon,tm.tm_mday,// tm.tm_hour,tm.tm_min,tm.tm_sec
// further,tm_wday has day of week,tm_yday has day in year
// i.e. it actually understands the date,not just chopping up numbers/text
注意:sscanf()
和strncpy()
是可从C ++调用的C函数,它们使用起来不如C ++特定功能(std::string
,std::istringstream
)安全,因为对数据的细微误解和错误不仅会导致错误的结果,但是程序崩溃了。因此,如果使用它们,请仔细阅读手册页。
,使用strncpy
...好吧,所以,如果这不是家庭作业,那么这是最好的方法。其他使用std :: string的人浪费资源:
static const char *yyyymmddhhmmss = \"20110526101559\";
char year[5] = { \'\\0\' };
char month[3] = { \'\\0\' };
char day[3] = { \'\\0\' };
char hour[3] = { \'\\0\' };
char minute[3] = { \'\\0\' };
char second[3] = { \'\\0\' };
strncpy(year,yyyymmddhhmmss,4);
strncpy(month,&yyyymmddhhmmss[4],2);
strncpy(day,&yyyymmddhhmmss[6],2);
strncpy(hour,&yyyymmddhhmmss[8],2);
strncpy(minute,&yyyymmddhhmmss[10],2);
strncpy(second,&yyyymmddhhmmss[12],2);
,由于您输入的格式为char[]
(或char*
-
这种使用,结果是一样的),最简单的解决方案是
可能使用两个迭代器构造函数来创建std::string
每个字段的字符串,例如:
std::string year ( date,date + 4 );
std::string month( date + 4,date + 6 );
std::string day ( date + 6,date + 8 );
// ...
如果需要数值,可以使用boost::lexical_cast
,
例如。:
int extractField( char const* string,int begin,int end )
{
return boost::lexical_cast<int>(
std::string( date + begin,date + end ) );
}
int year = extractField( date,4 );
int year = extractField( date,4,6 );
// ...