mirror of https://github.com/djcb/mu.git
mu-utils: support UTC in parse_date_time
Parsing dates known to be in UTC.
This commit is contained in:
parent
f73aad2b41
commit
c1950ae0cb
|
@ -413,7 +413,7 @@ fixup_month(struct tm* tbuf)
|
||||||
|
|
||||||
|
|
||||||
Option<::time_t>
|
Option<::time_t>
|
||||||
Mu::parse_date_time(const std::string& dstr, bool is_first)
|
Mu::parse_date_time(const std::string& dstr, bool is_first, bool utc)
|
||||||
{
|
{
|
||||||
struct tm tbuf{};
|
struct tm tbuf{};
|
||||||
GDateTime *dtime{};
|
GDateTime *dtime{};
|
||||||
|
@ -442,12 +442,20 @@ Mu::parse_date_time(const std::string& dstr, bool is_first)
|
||||||
return Nothing;
|
return Nothing;
|
||||||
|
|
||||||
fixup_month(&tbuf);
|
fixup_month(&tbuf);
|
||||||
dtime = g_date_time_new_local(tbuf.tm_year + 1900,
|
dtime = utc ?
|
||||||
|
g_date_time_new_utc(tbuf.tm_year + 1900,
|
||||||
|
tbuf.tm_mon + 1,
|
||||||
|
tbuf.tm_mday,
|
||||||
|
tbuf.tm_hour,
|
||||||
|
tbuf.tm_min,
|
||||||
|
tbuf.tm_sec) :
|
||||||
|
g_date_time_new_local(tbuf.tm_year + 1900,
|
||||||
tbuf.tm_mon + 1,
|
tbuf.tm_mon + 1,
|
||||||
tbuf.tm_mday,
|
tbuf.tm_mday,
|
||||||
tbuf.tm_hour,
|
tbuf.tm_hour,
|
||||||
tbuf.tm_min,
|
tbuf.tm_min,
|
||||||
tbuf.tm_sec);
|
tbuf.tm_sec);
|
||||||
|
|
||||||
t = g_date_time_to_unix(dtime);
|
t = g_date_time_to_unix(dtime);
|
||||||
g_date_time_unref(dtime);
|
g_date_time_unref(dtime);
|
||||||
|
|
||||||
|
|
|
@ -146,7 +146,7 @@ auto mu_join(Range&& range, std::string_view sepa) {
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
auto mu_time(T t, bool use_utc=false) {
|
std::tm mu_time(T t={}, bool use_utc=false) {
|
||||||
::time_t tt{static_cast<::time_t>(t)};
|
::time_t tt{static_cast<::time_t>(t)};
|
||||||
return use_utc ? fmt::gmtime(tt) : fmt::localtime(tt);
|
return use_utc ? fmt::gmtime(tt) : fmt::localtime(tt);
|
||||||
}
|
}
|
||||||
|
@ -253,10 +253,11 @@ static inline bool mu_print_encoded(fmt::format_string<T...> frm, T&&... args) n
|
||||||
* so 2018-05-05 is equivalent to 20180505.
|
* so 2018-05-05 is equivalent to 20180505.
|
||||||
* @param first whether to fill out incomplete dates to the start (@true) or the
|
* @param first whether to fill out incomplete dates to the start (@true) or the
|
||||||
* end (@false); ie. either 1972 -> 197201010000 or 1972 -> 197212312359
|
* end (@false); ie. either 1972 -> 197201010000 or 1972 -> 197212312359
|
||||||
|
* @param use_utc interpret @param date as UTC
|
||||||
*
|
*
|
||||||
* @return the corresponding time_t or Nothing if parsing failed.
|
* @return the corresponding time_t or Nothing if parsing failed.
|
||||||
*/
|
*/
|
||||||
Option<::time_t> parse_date_time(const std::string& date, bool first);
|
Option<::time_t> parse_date_time(const std::string& date, bool first, bool use_utc=false);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Crudely convert HTML to plain text. This attempts to scrape the
|
* Crudely convert HTML to plain text. This attempts to scrape the
|
||||||
|
|
Loading…
Reference in New Issue