mirror of
https://github.com/HowardHinnant/date.git
synced 2025-01-14 01:37:57 +08:00
Add member function name() const to Posix::time_zone
* Returns the minimal string that uniquely identifies this time_zone. That is, it takes advantage of all defaults.
This commit is contained in:
parent
e12095f26f
commit
f43c39fcf1
@ -87,6 +87,7 @@ public:
|
|||||||
|
|
||||||
bool ok() const {return mode_ != off;}
|
bool ok() const {return mode_ != off;}
|
||||||
date::local_seconds operator()(date::year y) const;
|
date::local_seconds operator()(date::year y) const;
|
||||||
|
std::string to_string() const;
|
||||||
|
|
||||||
friend std::ostream& operator<<(std::ostream& os, const rule& r);
|
friend std::ostream& operator<<(std::ostream& os, const rule& r);
|
||||||
friend unsigned read_date(const string_t& s, unsigned i, rule& r);
|
friend unsigned read_date(const string_t& s, unsigned i, rule& r);
|
||||||
@ -119,6 +120,62 @@ rule::operator()(date::year y) const
|
|||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
std::string
|
||||||
|
rule::to_string() const
|
||||||
|
{
|
||||||
|
using namespace std::chrono;
|
||||||
|
auto print_offset = [](seconds off)
|
||||||
|
{
|
||||||
|
std::string nm;
|
||||||
|
if (off != hours{2})
|
||||||
|
{
|
||||||
|
date::hh_mm_ss offset{off};
|
||||||
|
nm = '/';
|
||||||
|
nm += std::to_string(offset.hours().count());
|
||||||
|
if (offset.minutes() != minutes{0} || offset.seconds() != seconds{0})
|
||||||
|
{
|
||||||
|
nm += ':';
|
||||||
|
if (offset.minutes() < minutes{10})
|
||||||
|
nm += '0';
|
||||||
|
nm += std::to_string(offset.minutes().count());
|
||||||
|
if (offset.seconds() != seconds{0})
|
||||||
|
{
|
||||||
|
nm += ':';
|
||||||
|
if (offset.seconds() < seconds{10})
|
||||||
|
nm += '0';
|
||||||
|
nm += std::to_string(offset.seconds().count());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nm;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::string nm;
|
||||||
|
switch (mode_)
|
||||||
|
{
|
||||||
|
case rule::J:
|
||||||
|
nm = 'J';
|
||||||
|
nm += std::to_string(n_);
|
||||||
|
break;
|
||||||
|
case rule::M:
|
||||||
|
nm = 'M';
|
||||||
|
nm += std::to_string(static_cast<unsigned>(m_));
|
||||||
|
nm += '.';
|
||||||
|
nm += std::to_string(n_);
|
||||||
|
nm += '.';
|
||||||
|
nm += std::to_string(wd_.c_encoding());
|
||||||
|
break;
|
||||||
|
case rule::N:
|
||||||
|
nm = std::to_string(n_);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
nm += print_offset(time_);
|
||||||
|
return nm;
|
||||||
|
}
|
||||||
|
|
||||||
inline
|
inline
|
||||||
std::ostream&
|
std::ostream&
|
||||||
operator<<(std::ostream& os, const rule& r)
|
operator<<(std::ostream& os, const rule& r)
|
||||||
@ -178,6 +235,8 @@ public:
|
|||||||
friend std::ostream& operator<<(std::ostream& os, const time_zone& z);
|
friend std::ostream& operator<<(std::ostream& os, const time_zone& z);
|
||||||
|
|
||||||
const time_zone* operator->() const {return this;}
|
const time_zone* operator->() const {return this;}
|
||||||
|
|
||||||
|
std::string name() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline
|
inline
|
||||||
@ -419,6 +478,53 @@ operator<<(std::ostream& os, const time_zone& z)
|
|||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
std::string
|
||||||
|
time_zone::name() const
|
||||||
|
{
|
||||||
|
using namespace date;
|
||||||
|
using namespace std::chrono;
|
||||||
|
auto nm = std_abbrev_;
|
||||||
|
auto print_offset = [](seconds off)
|
||||||
|
{
|
||||||
|
std::string nm;
|
||||||
|
hh_mm_ss<seconds> offset{-off};
|
||||||
|
if (offset.is_negative())
|
||||||
|
nm += '-';
|
||||||
|
nm += std::to_string(offset.hours().count());
|
||||||
|
if (offset.minutes() != minutes{0} || offset.seconds() != seconds{0})
|
||||||
|
{
|
||||||
|
nm += ':';
|
||||||
|
if (offset.minutes() < minutes{10})
|
||||||
|
nm += '0';
|
||||||
|
nm += std::to_string(offset.minutes().count());
|
||||||
|
if (offset.seconds() != seconds{0})
|
||||||
|
{
|
||||||
|
nm += ':';
|
||||||
|
if (offset.seconds() < seconds{10})
|
||||||
|
nm += '0';
|
||||||
|
nm += std::to_string(offset.seconds().count());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nm;
|
||||||
|
};
|
||||||
|
nm += print_offset(offset_);
|
||||||
|
if (!dst_abbrev_.empty())
|
||||||
|
{
|
||||||
|
nm += dst_abbrev_;
|
||||||
|
if (save_ != hours{1})
|
||||||
|
nm += print_offset(offset_+save_);
|
||||||
|
if (start_rule_.ok())
|
||||||
|
{
|
||||||
|
nm += ',';
|
||||||
|
nm += start_rule_.to_string();
|
||||||
|
nm += ',';
|
||||||
|
nm += end_rule_.to_string();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nm;
|
||||||
|
}
|
||||||
|
|
||||||
namespace detail
|
namespace detail
|
||||||
{
|
{
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user