lldate.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:5k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file lldate.h
  3.  * @author Phoenix
  4.  * @date 2006-02-05
  5.  * @brief Declaration of a simple date class.
  6.  *
  7.  * $LicenseInfo:firstyear=2006&license=viewergpl$
  8.  * 
  9.  * Copyright (c) 2006-2010, Linden Research, Inc.
  10.  * 
  11.  * Second Life Viewer Source Code
  12.  * The source code in this file ("Source Code") is provided by Linden Lab
  13.  * to you under the terms of the GNU General Public License, version 2.0
  14.  * ("GPL"), unless you have obtained a separate licensing agreement
  15.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  16.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  17.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  18.  * 
  19.  * There are special exceptions to the terms and conditions of the GPL as
  20.  * it is applied to this Source Code. View the full text of the exception
  21.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  22.  * online at
  23.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  24.  * 
  25.  * By copying, modifying or distributing this software, you acknowledge
  26.  * that you have read and understood your obligations described above,
  27.  * and agree to abide by those obligations.
  28.  * 
  29.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  30.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  31.  * COMPLETENESS OR PERFORMANCE.
  32.  * $/LicenseInfo$
  33.  */
  34. #ifndef LL_LLDATE_H
  35. #define LL_LLDATE_H
  36. #include <iosfwd>
  37. #include <string>
  38. #include "stdtypes.h"
  39. /** 
  40.  * @class LLDate
  41.  * @brief This class represents a particular point in time in UTC.
  42.  *
  43.  * The date class represents a point in time after epoch - 1970-01-01.
  44.  */
  45. class LL_COMMON_API LLDate
  46. {
  47. public:
  48. /** 
  49.  * @brief Construct a date equal to epoch.
  50.  */
  51. LLDate();
  52. /** 
  53.  * @brief Construct a date equal to the source date.
  54.  */
  55. LLDate(const LLDate& date);
  56. /** 
  57.  * @brief Construct a date from a seconds since epoch value.
  58.  *
  59.  * @pararm seconds_since_epoch The number of seconds since UTC epoch.
  60.  */
  61. LLDate(F64 seconds_since_epoch);
  62. /** 
  63.  * @brief Construct a date from a string representation
  64.  *
  65.  * The date is constructed in the <code>fromString()</code>
  66.  * method. See that method for details of supported formats.
  67.  * If that method fails to parse the date, the date is set to epoch.
  68.  * @param iso8601_date An iso-8601 compatible representation of the date.
  69.  */
  70. LLDate(const std::string& iso8601_date);
  71. /** 
  72.  * @brief Return the date as in ISO-8601 string.
  73.  *
  74.  * @return A string representation of the date.
  75.  */
  76. std::string asString() const;
  77. std::string asRFC1123() const;
  78. void toStream(std::ostream&) const;
  79. bool split(S32 *year, S32 *month = NULL, S32 *day = NULL, S32 *hour = NULL, S32 *min = NULL, S32 *sec = NULL) const;
  80. std::string toHTTPDateString (std::string fmt) const;
  81. static std::string toHTTPDateString (tm * gmt, std::string fmt);
  82. /** 
  83.  * @brief Set the date from an ISO-8601 string.
  84.  *
  85.  * The parser only supports strings conforming to
  86.  * YYYYF-MM-DDTHH:MM:SS.FFZ where Y is year, M is month, D is day,
  87.  * H is hour, M is minute, S is second, F is sub-second, and all
  88.  * other characters are literal.
  89.  * If this method fails to parse the date, the previous date is
  90.  * retained.
  91.  * @param iso8601_date An iso-8601 compatible representation of the date.
  92.  * @return Returns true if the string was successfully parsed.
  93.  */
  94. bool fromString(const std::string& iso8601_date);
  95. bool fromStream(std::istream&);
  96. bool fromYMDHMS(S32 year, S32 month = 1, S32 day = 0, S32 hour = 0, S32 min = 0, S32 sec = 0);
  97. /** 
  98.  * @brief Return the date in seconds since epoch.
  99.  *
  100.  * @return The number of seconds since epoch UTC.
  101.  */
  102. F64 secondsSinceEpoch() const;
  103. /** 
  104.  * @brief Set the date in seconds since epoch.
  105.  *
  106.  * @param seconds The number of seconds since epoch UTC.
  107.  */
  108. void secondsSinceEpoch(F64 seconds);
  109.     
  110.     /**
  111.      * @brief Create an LLDate object set to the current time.
  112.  *
  113.  * @return The number of seconds since epoch UTC.
  114.  */
  115.     static LLDate now();
  116. /** 
  117.  * @brief Compare dates using operator< so we can order them using STL.
  118.  *
  119.  * @param rhs -- the right hand side of the comparison operator
  120.  */
  121. bool operator<(const LLDate& rhs) const;
  122.     
  123. /** 
  124.  * @brief Remaining comparison operators in terms of operator<
  125.      * This conforms to the expectation of STL.
  126.  *
  127.  * @param rhs -- the right hand side of the comparison operator
  128.  */
  129.     bool operator>(const LLDate& rhs) const { return rhs < *this; }
  130.     bool operator<=(const LLDate& rhs) const { return !(rhs < *this); }
  131.     bool operator>=(const LLDate& rhs) const { return !(*this < rhs); }
  132.     bool operator!=(const LLDate& rhs) const { return (*this < rhs) || (rhs < *this); }
  133.     bool operator==(const LLDate& rhs) const { return !(*this != rhs); }
  134. /**
  135.  * @brief Compare to epoch UTC.
  136.  */
  137. bool isNull() const { return mSecondsSinceEpoch == 0.0; }
  138. bool notNull() const { return mSecondsSinceEpoch != 0.0; }
  139.  
  140. private:
  141. F64 mSecondsSinceEpoch;
  142. };
  143. // Helper function to stream out a date
  144. LL_COMMON_API std::ostream& operator<<(std::ostream& s, const LLDate& date);
  145. // Helper function to stream in a date
  146. LL_COMMON_API std::istream& operator>>(std::istream& s, LLDate& date);
  147. #endif // LL_LLDATE_H