1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 #ifndef _LOG4CXX_HELPERS_SIMPLE_DATE_FORMAT_H 19 #define _LOG4CXX_HELPERS_SIMPLE_DATE_FORMAT_H 20 21 #if defined(_MSC_VER) 22 #pragma warning ( push ) 23 #pragma warning ( disable: 4231 4251 4275 4786 ) 24 #endif 25 26 27 28 #include <log4cxx/helpers/dateformat.h> 29 #include <vector> 30 #include <time.h> 31 32 #include <locale> 33 34 using std::locale; 35 36 namespace log4cxx 37 { 38 namespace helpers 39 { 40 namespace SimpleDateFormatImpl 41 { 42 class PatternToken; 43 } 44 45 LOG4CXX_LIST_DEF(PatternTokenList, log4cxx::helpers::SimpleDateFormatImpl::PatternToken*); 46 47 48 /** 49 * Concrete class for formatting and parsing dates in a 50 * locale-sensitive manner. 51 */ 52 class LOG4CXX_EXPORT SimpleDateFormat : public DateFormat 53 { 54 public: 55 /** 56 * Constructs a DateFormat using the given pattern and the default 57 * time zone. 58 * 59 * @param pattern the pattern describing the date and time format 60 */ 61 SimpleDateFormat(const LogString& pattern); 62 SimpleDateFormat(const LogString& pattern, const std::locale* locale); 63 ~SimpleDateFormat(); 64 65 virtual void format(LogString& s, 66 log4cxx_time_t tm, 67 log4cxx::helpers::Pool& p) const; 68 69 /** 70 * Set time zone. 71 * @param zone new time zone. 72 */ 73 void setTimeZone(const TimeZonePtr& zone); 74 75 private: 76 /** 77 * Time zone. 78 */ 79 TimeZonePtr timeZone; 80 81 /** 82 * List of tokens. 83 */ 84 PatternTokenList pattern; 85 86 static void addToken(const logchar spec, const int repeat, const std::locale* locale, PatternTokenList& pattern); 87 static void parsePattern(const LogString& spec, const std::locale* locale, PatternTokenList& pattern); 88 }; 89 90 91 } // namespace helpers 92 } // namespace log4cxx 93 94 #if defined(_MSC_VER) 95 #pragma warning ( pop ) 96 #endif 97 98 99 100 #endif // _LOG4CXX_HELPERS_SIMPLE_DATE_FORMAT_H 101