aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/cctz/src/civil_time_detail.cc
blob: 4f9019f3533bbf60d219ae0540439ec481f2806a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// Copyright 2016 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//   https://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
 
#include "cctz/civil_time_detail.h"

#include <iomanip> 
#include <ostream> 
#include <sstream> 
 
namespace cctz { 
namespace detail { 
 
// Output stream operators output a format matching YYYY-MM-DDThh:mm:ss, 
// while omitting fields inferior to the type's alignment. For example, 
// civil_day is formatted only as YYYY-MM-DD. 
std::ostream& operator<<(std::ostream& os, const civil_year& y) { 
  std::stringstream ss; 
  ss << y.year();  // No padding. 
  return os << ss.str(); 
} 
std::ostream& operator<<(std::ostream& os, const civil_month& m) { 
  std::stringstream ss; 
  ss << civil_year(m) << '-'; 
  ss << std::setfill('0') << std::setw(2) << m.month(); 
  return os << ss.str(); 
} 
std::ostream& operator<<(std::ostream& os, const civil_day& d) { 
  std::stringstream ss; 
  ss << civil_month(d) << '-'; 
  ss << std::setfill('0') << std::setw(2) << d.day(); 
  return os << ss.str(); 
} 
std::ostream& operator<<(std::ostream& os, const civil_hour& h) { 
  std::stringstream ss; 
  ss << civil_day(h) << 'T'; 
  ss << std::setfill('0') << std::setw(2) << h.hour(); 
  return os << ss.str(); 
} 
std::ostream& operator<<(std::ostream& os, const civil_minute& m) { 
  std::stringstream ss; 
  ss << civil_hour(m) << ':'; 
  ss << std::setfill('0') << std::setw(2) << m.minute(); 
  return os << ss.str(); 
} 
std::ostream& operator<<(std::ostream& os, const civil_second& s) { 
  std::stringstream ss; 
  ss << civil_minute(s) << ':'; 
  ss << std::setfill('0') << std::setw(2) << s.second(); 
  return os << ss.str(); 
} 
 
//////////////////////////////////////////////////////////////////////// 
 
std::ostream& operator<<(std::ostream& os, weekday wd) { 
  switch (wd) { 
    case weekday::monday: 
      return os << "Monday"; 
    case weekday::tuesday: 
      return os << "Tuesday"; 
    case weekday::wednesday: 
      return os << "Wednesday"; 
    case weekday::thursday: 
      return os << "Thursday"; 
    case weekday::friday: 
      return os << "Friday"; 
    case weekday::saturday: 
      return os << "Saturday"; 
    case weekday::sunday: 
      return os << "Sunday"; 
  } 
  return os;  // Should never get here, but -Wreturn-type may warn without this. 
} 
 
}  // namespace detail 
}  // namespace cctz