Move quiche_time_utils to platform/default.

PiperOrigin-RevId: 355511520
Change-Id: I81552118e4d7354c154b57d2dd286e2e76ec5638
diff --git a/common/platform/api/quiche_time_utils.h b/common/platform/api/quiche_time_utils.h
index e1e59f0..9a957b0 100644
--- a/common/platform/api/quiche_time_utils.h
+++ b/common/platform/api/quiche_time_utils.h
@@ -7,7 +7,7 @@
 
 #include <cstdint>
 
-#include "net/quiche/common/platform/impl/quiche_time_utils_impl.h"
+#include "quiche_platform_impl/quiche_time_utils_impl.h"
 
 namespace quiche {
 
diff --git a/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.cc b/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.cc
new file mode 100644
index 0000000..1c6889f
--- /dev/null
+++ b/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.cc
@@ -0,0 +1,52 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "quiche_platform_impl/quiche_time_utils_impl.h"
+
+#include "absl/time/civil_time.h"
+#include "absl/time/time.h"
+
+namespace quiche {
+
+namespace {
+absl::optional<int64_t> QuicheUtcDateTimeToUnixSecondsInner(int year,
+                                                            int month,
+                                                            int day,
+                                                            int hour,
+                                                            int minute,
+                                                            int second) {
+  const absl::CivilSecond civil_time(year, month, day, hour, minute, second);
+  if (second != 60 &&
+      (civil_time.year() != year || civil_time.month() != month ||
+       civil_time.day() != day || civil_time.hour() != hour ||
+       civil_time.minute() != minute || civil_time.second() != second)) {
+    return absl::nullopt;
+  }
+
+  const absl::Time time = absl::FromCivil(civil_time, absl::UTCTimeZone());
+  return absl::ToUnixSeconds(time);
+}
+}  // namespace
+
+absl::optional<int64_t> QuicheUtcDateTimeToUnixSecondsImpl(int year,
+                                                           int month,
+                                                           int day,
+                                                           int hour,
+                                                           int minute,
+                                                           int second) {
+  // Handle leap seconds without letting any other irregularities happen.
+  if (second == 60) {
+    auto previous_second = QuicheUtcDateTimeToUnixSecondsInner(
+        year, month, day, hour, minute, second - 1);
+    if (!previous_second.has_value()) {
+      return absl::nullopt;
+    }
+    return *previous_second + 1;
+  }
+
+  return QuicheUtcDateTimeToUnixSecondsInner(year, month, day, hour, minute,
+                                             second);
+}
+
+}  // namespace quiche
diff --git a/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h b/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h
new file mode 100644
index 0000000..56a08db
--- /dev/null
+++ b/common/platform/default/quiche_platform_impl/quiche_time_utils_impl.h
@@ -0,0 +1,23 @@
+// Copyright 2021 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef QUICHE_COMMON_PLATFORM_IMPL_QUICHE_TIME_UTILS_IMPL_H_
+#define QUICHE_COMMON_PLATFORM_IMPL_QUICHE_TIME_UTILS_IMPL_H_
+
+#include <cstdint>
+
+#include "absl/types/optional.h"
+
+namespace quiche {
+
+absl::optional<int64_t> QuicheUtcDateTimeToUnixSecondsImpl(int year,
+                                                           int month,
+                                                           int day,
+                                                           int hour,
+                                                           int minute,
+                                                           int second);
+
+}  // namespace quiche
+
+#endif  // QUICHE_COMMON_PLATFORM_IMPL_QUICHE_TIME_UTILS_IMPL_H_