| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/schema_org/common/time.h" |
| |
| #include <sstream> |
| |
| namespace schema_org { |
| |
| std::optional<base::TimeDelta> ParseISO8601Duration(const std::string& str) { |
| if (str.empty() || str[0] != 'P') |
| return std::nullopt; |
| |
| base::TimeDelta duration; |
| |
| std::string time = ""; |
| int time_index = str.find("T"); |
| if (time_index == -1) |
| return std::nullopt; |
| |
| time = str.substr(time_index + 1); |
| std::stringstream t(time); |
| char unit; |
| int amount; |
| |
| while (t >> amount) { |
| t >> unit; |
| switch (unit) { |
| case 'H': |
| duration = duration + base::Hours(amount); |
| break; |
| case 'M': |
| duration = duration + base::Minutes(amount); |
| break; |
| case 'S': |
| duration = duration + base::Seconds(amount); |
| break; |
| default: |
| return std::nullopt; |
| } |
| } |
| |
| return duration; |
| } |
| |
| } // namespace schema_org |