Commit 4a0255b1 by Abseil Team Committed by Copybara-Service

Support AbslStringify in absl Civil Time types.

PiperOrigin-RevId: 582342910
Change-Id: Iada5420867779ed352d8fb0695ff6d6044acfba2
parent 716fa007
...@@ -462,6 +462,32 @@ std::string FormatCivilTime(CivilDay c); ...@@ -462,6 +462,32 @@ std::string FormatCivilTime(CivilDay c);
std::string FormatCivilTime(CivilMonth c); std::string FormatCivilTime(CivilMonth c);
std::string FormatCivilTime(CivilYear c); std::string FormatCivilTime(CivilYear c);
// Support for StrFormat(), StrCat(), etc
template <typename Sink>
void AbslStringify(Sink& sink, CivilSecond c) {
sink.Append(FormatCivilTime(c));
}
template <typename Sink>
void AbslStringify(Sink& sink, CivilMinute c) {
sink.Append(FormatCivilTime(c));
}
template <typename Sink>
void AbslStringify(Sink& sink, CivilHour c) {
sink.Append(FormatCivilTime(c));
}
template <typename Sink>
void AbslStringify(Sink& sink, CivilDay c) {
sink.Append(FormatCivilTime(c));
}
template <typename Sink>
void AbslStringify(Sink& sink, CivilMonth c) {
sink.Append(FormatCivilTime(c));
}
template <typename Sink>
void AbslStringify(Sink& sink, CivilYear c) {
sink.Append(FormatCivilTime(c));
}
// absl::ParseCivilTime() // absl::ParseCivilTime()
// //
// Parses a civil-time value from the specified `absl::string_view` into the // Parses a civil-time value from the specified `absl::string_view` into the
......
...@@ -19,8 +19,9 @@ ...@@ -19,8 +19,9 @@
#include <sstream> #include <sstream>
#include <type_traits> #include <type_traits>
#include "absl/base/macros.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
#include "absl/base/macros.h"
#include "absl/strings/str_format.h"
namespace { namespace {
...@@ -869,6 +870,23 @@ TEST(CivilTime, ParseEdgeCases) { ...@@ -869,6 +870,23 @@ TEST(CivilTime, ParseEdgeCases) {
EXPECT_FALSE(absl::ParseLenientCivilTime("9223372036854775808", &y)) << y; EXPECT_FALSE(absl::ParseLenientCivilTime("9223372036854775808", &y)) << y;
} }
TEST(CivilTime, AbslStringify) {
EXPECT_EQ("2015-01-02T03:04:05",
absl::StrFormat("%v", absl::CivilSecond(2015, 1, 2, 3, 4, 5)));
EXPECT_EQ("2015-01-02T03:04",
absl::StrFormat("%v", absl::CivilMinute(2015, 1, 2, 3, 4)));
EXPECT_EQ("2015-01-02T03",
absl::StrFormat("%v", absl::CivilHour(2015, 1, 2, 3)));
EXPECT_EQ("2015-01-02", absl::StrFormat("%v", absl::CivilDay(2015, 1, 2)));
EXPECT_EQ("2015-01", absl::StrFormat("%v", absl::CivilMonth(2015, 1)));
EXPECT_EQ("2015", absl::StrFormat("%v", absl::CivilYear(2015)));
}
TEST(CivilTime, OutputStream) { TEST(CivilTime, OutputStream) {
absl::CivilSecond cs(2016, 2, 3, 4, 5, 6); absl::CivilSecond cs(2016, 2, 3, 4, 5, 6);
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment