#1941 : Obseved Data : Add support for parsing of start date

This commit is contained in:
Magne Sjaastad 2017-09-28 09:06:40 +02:00
parent 9364efa4b7
commit 8bae516af7
3 changed files with 56 additions and 9 deletions

View File

@ -29,11 +29,11 @@ quint64 RiaDateTimeTools::secondsFromUnit(const std::string& unit)
{
QString str = QString::fromStdString(unit).trimmed().toUpper();
if (str == "DAYS")
if (str == "DAYS" || str == "DAY")
{
return RiaDateTimeTools::secondsInDay();
}
else if (str == "YEARS")
else if (str == "YEARS" || str == "YEAR")
{
return RiaDateTimeTools::secondsInYear();
}

View File

@ -87,15 +87,34 @@ bool RifColumnBasedUserData::parse(const QString& data)
else
{
const ColumnInfo& ci = m_parser->tables()[tableIndex][timeColumnIndex];
QDateTime startDate;
QString startDateString = QString::fromStdString(ci.startDate);
if (!startDateString.isEmpty())
{
QString dateFormatString = "ddMMyyyy";
startDate = QDateTime::fromString(startDateString, dateFormatString);
}
m_timeSteps.resize(m_timeSteps.size() + 1);
quint64 scaleFactor = RiaDateTimeTools::secondsFromUnit(ci.unitName);
std::vector<time_t>& timeSteps = m_timeSteps.back();
if (startDate.isValid())
{
for (auto v : ci.values)
for (const auto& timeStepValue : ci.values)
{
timeSteps.push_back(v * scaleFactor);
QDateTime dateTime = startDate.addSecs(scaleFactor * timeStepValue);
timeSteps.push_back(dateTime.toTime_t());
}
}
else
{
for (const auto& timeStepValue : ci.values)
{
timeSteps.push_back(scaleFactor * timeStepValue);
}
}

View File

@ -93,13 +93,41 @@ bool RifKeywordVectorUserData::parse(const QString& data)
if (isTimeHeader(keyValuePairs))
{
QString unitText = valueForKey(keyValuePairs, "UNITS");
quint64 scaleFactor = RiaDateTimeTools::secondsFromUnit(unitText.toStdString());
std::vector<time_t> ts;
for (const auto& year : m_parser->keywordBasedVectors()[i].values)
{
ts.push_back(scaleFactor * year);
QDateTime startDate;
QString startDateString = valueForKey(keyValuePairs, "STARTDATE");
if (!startDateString.isEmpty())
{
QString dateFormatString = valueForKey(keyValuePairs, "DATEFORMAT");
if (dateFormatString.isEmpty())
{
dateFormatString = "DD MM YYYY";
}
startDate = QDateTime::fromString(startDateString, dateFormatString);
}
QString unitText = valueForKey(keyValuePairs, "UNITS");
quint64 scaleFactor = RiaDateTimeTools::secondsFromUnit(unitText.toStdString());
if (startDate.isValid())
{
for (const auto& timeStepValue : m_parser->keywordBasedVectors()[i].values)
{
QDateTime dateTime = startDate.addSecs(scaleFactor * timeStepValue);
ts.push_back(dateTime.toTime_t());
}
}
else
{
for (const auto& timeStepValue : m_parser->keywordBasedVectors()[i].values)
{
ts.push_back(scaleFactor * timeStepValue);
}
}
}
m_timeSteps.push_back(ts);