Ah, juste obtenu l'édition .
Correct, microseconds
n'est pas un membre de date::time_of_day
. Le documentation pour time_of_day<Duration>
donne ce résumé lorsque Duration
a sous-seconde précision:
time_of_day<std::chrono::duration<Rep, Period>>
{
public:
using precision = The decimal-based duration used to format
constexpr time_of_day() noexcept;
constexpr explicit time_of_day(std::chrono::duration<Rep, Period> since_midnight) noexcept;
constexpr std::chrono::hours hours() const noexcept;
constexpr std::chrono::minutes minutes() const noexcept;
constexpr std::chrono::seconds seconds() const noexcept;
constexpr precision subseconds() const noexcept;
constexpr unsigned mode() const noexcept;
constexpr explicit operator precision() const noexcept;
constexpr precision to_duration() const noexcept;
void make24() noexcept;
void make12() noexcept;
};
Si je change:
the_time.microseconds().count()
à:
the_time.subseconds().count()
Ensuite, la sortie que je reçois est:
2016-12-11 15:43:22.099992
Year: 2016
Month: 12
Date: 11
Hour: 15
Minutes: 43
Seconds: 22
Micro Seconds: 99992
Est-ce ce que vous obtenez? Si c'est le cas, vous obtenez la bonne réponse. Si vous n'obtenez pas ceci, s'il vous plaît dites-nous ce que vous sont voir. Des bugs surviennent, et j'apprécie les rapports de bogues et j'essaie de les corriger le plus rapidement possible.
Si ce est ce que vous voyez, et vous ne le croyez pas correct, vous pouvez être dérouté par l'arrondissement. Vous lisez 7 chiffres décimaux décimaux, puis vous demandez que cela soit arrondi à 6 chiffres décimaux décimaux. Si vous désirez la pleine précision de l'horodatage dans la chaîne, vous aurez besoin d'utiliser une unité au moins aussi fine que 100ns, par exemple:
date::sys_time<std::chrono::nanoseconds> tp;
// ...
auto the_time = date::make_time(tp - dp);
// ...
std::cout << "Nanoseconds: " << the_time.subseconds().count() << std::endl;
Et la sortie se termine maintenant avec:
Nanoseconds: 99991900
Mise à jour
la raison pour laquelle le nom subseconds
par opposition au nom plus évidente est que le microseconds
precision
(et donc le type de retour) de ce membre est trop va Ried pour moi de donner un nom plus précis pour retourner les secondes fractionnaires. Cela pourrait être nanoseconds
comme démontré ci-dessus. Ou il pourrait même être quelque chose de fou comme microfortnights
.
Dans les commentaires ci-dessous lorsque j'ai noté que cette question a trouvé un bug. Il s'avère que quand j'ai essayé d'analyser microfortnights
j'ai eu une erreur de compilation, que je viens de corriger.
qu'est-ce qui est incorrect? – Swift
'microseconds()' n'est pas membre de 'date :: time_of_day' –