view modules/date/date.h @ 488:b280d7aca160

Json: add typed valueOr for objects and arrays
author David Demelier <markand@malikania.fr>
date Fri, 13 Nov 2015 19:53:38 +0100
parents 7ee8da32da98
children f48bb09bccc7
line wrap: on
line source

/*
 * date.h -- date and time manipulation
 *
 * Copyright (c) 2011-2015 David Demelier <markand@malikania.fr>
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#ifndef _DATE_H_
#define _DATE_H_

/**
 * @file date.h
 * @brief Basic date management.
 */

#include <cstdint>
#include <ctime>
#include <string>

/**
 * @class Date
 * @brief Basic date class and format.
 */
class Date {
private:
	time_t m_timestamp;

public:
	/**
	 * Default constructor to the current date.
	 */
	Date();

	/**
	 * Date with specific timestamp.
	 *
	 * @param timestamp the timestamp
	 */
	Date(time_t timestamp);

	/**
	 * Get the timestamp.
	 *
	 * @return the timestamp
	 */
	inline time_t timestamp() const noexcept
	{
		return m_timestamp;
	}

	/**
	 * Format the current that in the specified format,
	 * see strftime(3) for patterns.
	 *
	 * @param format the format
	 * @return the date formated
	 */
	std::string format(const std::string &format);
};

/**
 * Check is two dates are identical.
 *
 * @param d1 the first date
 * @param d2 the second date
 * @return true if same
 */
bool operator==(const Date &d1, const Date &d2);

/**
 * Check is a date is less or equal the second date.
 *
 * @param d1 the first date
 * @param d2 the second date
 * @return true if d1 <= d2
 */
bool operator<=(const Date &d1, const Date &d2);

#endif // !_DATE_H_