表示日期的字符串并对其进行转换
string representing date and transform it
要格式化表示从其他部分收到的日期的字符串,需要进行一些转换:
source:
std::string s = "20190510";
target:
std::string t = "05/10/2019";
一种方法是一个字符一个字符地复制,有没有一种既漂亮又快速的优雅方法?
更新:抱歉,转换应该是从 "yyyymmdd" 到 "mm/dd/yyyy"。
尝试 insert
:
int main() {
std::string s = "20190510";
s.insert(4, "/");
s.insert(7, "/");
std::cout << s << std::endl;
}
如果您不想修改或复制字符串,那么您可以选择 仅在需要时格式化它。这可以通过一个小工具来完成:
struct date_format {
std::string const& str;
date_format(std::string const& str) : str(str) {}
friend std::ostream& operator<< (std::ostream& os, date_format const& df) {
return os.write(&df.str[4], 2)
.put('/')
.write(&df.str[6], 2)
.put('/')
.write(&df.str[0], 4);
}
};
比如这样使用std::cout << date_format(source);
,see it live.
否则肯定需要复制或移动角色。
要格式化表示从其他部分收到的日期的字符串,需要进行一些转换:
source:
std::string s = "20190510";
target:
std::string t = "05/10/2019";
一种方法是一个字符一个字符地复制,有没有一种既漂亮又快速的优雅方法?
更新:抱歉,转换应该是从 "yyyymmdd" 到 "mm/dd/yyyy"。
尝试 insert
:
int main() {
std::string s = "20190510";
s.insert(4, "/");
s.insert(7, "/");
std::cout << s << std::endl;
}
如果您不想修改或复制字符串,那么您可以选择 仅在需要时格式化它。这可以通过一个小工具来完成:
struct date_format {
std::string const& str;
date_format(std::string const& str) : str(str) {}
friend std::ostream& operator<< (std::ostream& os, date_format const& df) {
return os.write(&df.str[4], 2)
.put('/')
.write(&df.str[6], 2)
.put('/')
.write(&df.str[0], 4);
}
};
比如这样使用std::cout << date_format(source);
,see it live.
否则肯定需要复制或移动角色。