00001 // Copyright 2016 Google Inc. All Rights Reserved. 00002 // 00003 // Licensed under the Apache License, Version 2.0 (the "License"); 00004 // you may not use this file except in compliance with the License. 00005 // You may obtain a copy of the License at 00006 // 00007 // https://www.apache.org/licenses/LICENSE-2.0 00008 // 00009 // Unless required by applicable law or agreed to in writing, software 00010 // distributed under the License is distributed on an "AS IS" BASIS, 00011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00012 // See the License for the specific language governing permissions and 00013 // limitations under the License. 00014 00015 #ifndef ABSL_TIME_INTERNAL_CCTZ_TIME_ZONE_LIBC_H_ 00016 #define ABSL_TIME_INTERNAL_CCTZ_TIME_ZONE_LIBC_H_ 00017 00018 #include <string> 00019 00020 #include "time_zone_if.h" 00021 00022 namespace absl { 00023 namespace time_internal { 00024 namespace cctz { 00025 00026 // A time zone backed by gmtime_r(3), localtime_r(3), and mktime(3), 00027 // and which therefore only supports UTC and the local time zone. 00028 // TODO: Add support for fixed offsets from UTC. 00029 class TimeZoneLibC : public TimeZoneIf { 00030 public: 00031 explicit TimeZoneLibC(const std::string& name); 00032 00033 // TimeZoneIf implementations. 00034 time_zone::absolute_lookup BreakTime( 00035 const time_point<seconds>& tp) const override; 00036 time_zone::civil_lookup MakeTime( 00037 const civil_second& cs) const override; 00038 bool NextTransition(const time_point<seconds>& tp, 00039 time_zone::civil_transition* trans) const override; 00040 bool PrevTransition(const time_point<seconds>& tp, 00041 time_zone::civil_transition* trans) const override; 00042 std::string Version() const override; 00043 std::string Description() const override; 00044 00045 private: 00046 const bool local_; // localtime or UTC 00047 }; 00048 00049 } // namespace cctz 00050 } // namespace time_internal 00051 } // namespace absl 00052 00053 #endif // ABSL_TIME_INTERNAL_CCTZ_TIME_ZONE_LIBC_H_