c++中如何从字符串2015-6-8取出年月日

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中如何从字符串2015-6-8取出年月日相关的知识,希望对你有一定的参考价值。

c++中如何从字符串2015-6-8取出年月日

在C++中字符串有两种,不过提取方式类似,具体如下:

一、以\'\\0\'结束的字符数组。

对于以\'\\0\'结束的字符数组,可以有如下两种方式:

1、通过自定义函数提取。

由于格式固定,所以可以通过计算提取。

void get_data(char *s, int &y, int &m, int &d)

    int i=0;
    y=0;
    while(s[i]!= \'-\')//循环提取出年。
    
        y=y*10+s[i]-\'0\';
        i++;
    
    i++;//忽略\'-\'.
    m=0;
    while(s[i]!=\'-\')//循环提取出月。
    
        m=m*10+s[i]-\'0\';
        i++;
    
    i++;//忽略\'-\'
    d=0;
    while(s[i]!=\'\\0\')//循环提取出日。
    
        d=d*10+s[i]-\'0\';
        i++;
    

2、利用sscanf自动完成。

sscanf可以从字符串中格式化提取数据。 

代码如下:

void get_data(char *s, int &y, int &m, int &d)

    sscanf(s,"%d-%d-%d",&y,&m,&d);//这样一句就可以了。 

二、string类字符串。

与字符数组类似,string类字符串也可以用类似方式实现。 

1、通过自定义函数:

void get_data(string &s, int &y, int &m, int &d)

    int i=0;
    y=0;
    while(s[i]!= \'-\')//循环提取出年。
    
        y=y*10+s[i]-\'0\';
        i++;
    
    i++;//忽略\'-\'.
    m=0;
    while(s[i]!=\'-\')//循环提取出月。
    
        m=m*10+s[i]-\'0\';
        i++;
    
    i++;//忽略\'-\'
    d=0;
    while(i<s.length())//循环提取出日。
    
        d=d*10+s[i]-\'0\';
        i++;
    

2、string类可以转为字符数组形式,所以一样可以用sscanf。

void get_data(string &s, int &y, int &m, int &d)

    sscanf(s.c_str(),"%d-%d-%d",&y,&m,&d);//s.c_str()可以将string类转为字符数组形式,以\'\\0\'结尾。 所以可以类似操作。  
参考技术A

字符串变量string可以当成字符数组一样用

string a = "2015-06-08";
int year,month,day;
year = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
month = a[5] * 10 + a[6];
day = a[8] * 10 + a[9];

sql从身份证中取出出生日期

以oracle为例:假设你的tb_csm_individual表里面CERTIFICATE_CODE字段存着身份证号:
select
to_date(substr(CERTIFICATE_CODE,7,8),'%yyyy%mm%dd')
from
tb_csm_individual
where
CERTIFICATE_CODE='210102197908223722'
;这样就查出来了这个身份证号的出生日期;
下面的脚本就是计算当前日期减去出生日期求出来的生日
select
EXTRACT(year
FROM
to_date('2018-11-22','yyyy-mm-dd'))
-
EXTRACT(year
FROM
to_date(substr(CERTIFICATE_CODE,7,8),'yyyy-mm-dd'))
years
from
tb_csm_individual
where
CERTIFICATE_CODE='210102197908223722';
至于剩下的年龄区间楼主自己应该知道怎么求了把
参考技术A 根据身份证号验证出生日期:
alter
table
你的表--修改表
/*添加约束
要么删掉你之前的生日约束
要么把
约束开始到结束复制到你的约束里再改*/
add
constraint
ck_生日
check(
--约束开始
convert(datetime,replace(stuff(stuff(right
(left(char之类类型的18位的身份证号,14),8),5,0,'-'),8,0,'-'),'0',''))=生日字段
--约束结束
)
最后只要把中文替换掉就可以了本回答被提问者采纳

以上是关于c++中如何从字符串2015-6-8取出年月日的主要内容,如果未能解决你的问题,请参考以下文章

java 中怎么把2002-11-11这个字符串分割成单独的字符串 年月日。并分别取出

根据身份证号码提取出生年月,在EXCEL中怎么设函数公式?

sql 怎么把年月日转化成年月

ORACLE 中如何截取到时间的年月日中的年月日

ORACLE 中如何截取到时间的年月日中的年月日

SQL中的datetime取出来是年月日时分秒,可不可以只截取年月日或时分秒? 谢谢