我正在嘗試從 PNG 檔案決議日期時間,但無法完全理解 QRegExp
this_png_20211208_1916.png
QDateTime Product::GetObstime()
{
QDateTime obstime;
QString filename = FLAGS_file_name.c_str();
QString year, month, day, hour, minute, second;
QRegExp regexp = QRegExp("^.*\\w _(\\d{4}\\d{2}\\d{2})_(\\d{2}\\d{2})\\.png$");
VLOG(3) << " filename: " << filename.toStdString();
if(regexp.indexIn(filename) !=-1)
{
VLOG(3) << " filename: " << filename.toStdString();
QStringList dt_bits = regexp.capturedTexts();
if(dt_bits.size() >=2)
{
year = dt_bits.at(1).mid(0, 4);
month = dt_bits.at(1).mid(5, 2);
day = dt_bits.at(1).mid(8, 2);
hour = dt_bits.at(2).mid(0, 2);
minute = dt_bits.at(2).mid(3, 2);
second = dt_bits.at(2).mid(3, 2);
VLOG(3) << " Year: " << year.toStdString()
<< " Month: " << month.toStdString()
<< " Day: " << day.toStdString()
<< " Hour: " << hour.toStdString()
<< " Min: " << minute.toStdString()
<< " Sec: " << second.toStdString();
QString datetime_str = year "-" month "-" day
"T" hour ":" minute second "00Z";
obstime = QDateTime::fromString(datetime_str, Qt::ISODate);
if (obstime.isValid())
{
VLOG(3)<<"Date iS VALID: "<<obstime.toString(Qt::ISODate).toStdString();
}
else
{
LOG(ERROR)<<" Error! Date Time bits did not match format.";
}
}
}
return obstime;
}
一直在使用像https://regex101.com/這樣的工具
但無濟于事。我錯過了什么嗎?
uj5u.com熱心網友回復:
您的代碼中有以下錯誤:
month = dt_bits.at(1).mid(5, 2);應該是month = dt_bits.at(1).mid(4, 2);因為索引是基于 0 的,而不是基于 1 的day = dt_bits.at(1).mid(8, 2);應該day = dt_bits.at(1).mid(6, 2);minute = dt_bits.at(2).mid(3, 2);應該minute = dt_bits.at(2).mid(2, 2);second = dt_bits.at(2).mid(3, 2);應該是second = "00";因為您的檔案名不包含秒
一般來說,我會建議在正則運算式中完成所有作業,而不是使用QString::mid()以下方法進行一些花哨的拆分:
QRegExp regexp = QRegExp("^.*\\w _(\\d{4})(\\d{2})(\\d{2})_(\\d{2})(\\d{2})\\.png$");
這為您提供了單獨分組中的所有欄位,根本不需要QString::mid()。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/378399.html
下一篇:div類的條件文本更改
