Skip to content

Commit

Permalink
Support AbslStringify in absl Civil Time types.
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 582342910
Change-Id: Iada5420867779ed352d8fb0695ff6d6044acfba2
  • Loading branch information
Abseil Team authored and copybara-github committed Nov 14, 2023
1 parent 716fa00 commit 4a0255b
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 1 deletion.
26 changes: 26 additions & 0 deletions absl/time/civil_time.h
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,32 @@ std::string FormatCivilTime(CivilDay c);
std::string FormatCivilTime(CivilMonth 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()
//
// Parses a civil-time value from the specified `absl::string_view` into the
Expand Down
20 changes: 19 additions & 1 deletion absl/time/civil_time_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@
#include <sstream>
#include <type_traits>

#include "absl/base/macros.h"
#include "gtest/gtest.h"
#include "absl/base/macros.h"
#include "absl/strings/str_format.h"

namespace {

Expand Down Expand Up @@ -869,6 +870,23 @@ TEST(CivilTime, ParseEdgeCases) {
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) {
absl::CivilSecond cs(2016, 2, 3, 4, 5, 6);
{
Expand Down

0 comments on commit 4a0255b

Please sign in to comment.