From f61d7fd7afae0520e6366d7d1a08a943a1142f52 Mon Sep 17 00:00:00 2001 From: JDierkse Date: Mon, 4 May 2020 21:22:57 +0200 Subject: [PATCH] Initial commit --- .gitignore | 6 +++++ .gitmodules | 3 +++ Date/Makefile | 1 + Date/tz.cpp | 1 + DateTime/DateTime.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++ DateTime/Makefile | 1 + Libraries/date | 1 + Makefile | 1 + Makefile.conf | 11 +++++++++ Makefile.target | 12 ++++++++++ Makefiles | 1 + include/DateTime.h | 34 ++++++++++++++++++++++++++++ include/chrono_io.h | 1 + include/date.h | 1 + include/ios.h | 1 + include/islamic.h | 1 + include/iso_week.h | 1 + include/julian.h | 1 + include/ptz.h | 1 + include/solar_hijri.h | 1 + include/tz.h | 1 + include/tz_private.h | 1 + 22 files changed, 134 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 120000 Date/Makefile create mode 120000 Date/tz.cpp create mode 100644 DateTime/DateTime.cpp create mode 120000 DateTime/Makefile create mode 120000 Libraries/date create mode 120000 Makefile create mode 100644 Makefile.conf create mode 100644 Makefile.target create mode 160000 Makefiles create mode 100644 include/DateTime.h create mode 120000 include/chrono_io.h create mode 120000 include/date.h create mode 120000 include/ios.h create mode 120000 include/islamic.h create mode 120000 include/iso_week.h create mode 120000 include/julian.h create mode 120000 include/ptz.h create mode 120000 include/solar_hijri.h create mode 120000 include/tz.h create mode 120000 include/tz_private.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..851ef09 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +*.o.* +*.d.* +*.a.* +.*.swp +.AppleDouble +lib diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..876e403 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "Makefiles"] + path = Makefiles + url = https://gogs.dierkse.nl/JDierkse/Makefiles diff --git a/Date/Makefile b/Date/Makefile new file mode 120000 index 0000000..d0b0e8e --- /dev/null +++ b/Date/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/Date/tz.cpp b/Date/tz.cpp new file mode 120000 index 0000000..e8944e3 --- /dev/null +++ b/Date/tz.cpp @@ -0,0 +1 @@ +../../date/src/tz.cpp \ No newline at end of file diff --git a/DateTime/DateTime.cpp b/DateTime/DateTime.cpp new file mode 100644 index 0000000..2d13b0d --- /dev/null +++ b/DateTime/DateTime.cpp @@ -0,0 +1,52 @@ +#include "DateTime.h" + + +namespace DateTime { + +std::chrono::system_clock::time_point DateTime_UTC_to_time_point(const DateTime& dateTime) +{ + auto yearMonthDay = date::year(dateTime.year)/dateTime.month/dateTime.day; + if (!yearMonthDay.ok()) + throw std::runtime_error("Invalid date"); + + return date::sys_days(yearMonthDay) + std::chrono::hours(dateTime.hour) + std::chrono::minutes(dateTime.min) + std::chrono::seconds(dateTime.sec); +} + +std::chrono::system_clock::time_point DateTime_to_time_point(const DateTime& dateTime, const date::time_zone* timeZone) +{ + auto yearMonthDay = date::year(dateTime.year)/dateTime.month/dateTime.day; + if (!yearMonthDay.ok()) + throw std::runtime_error("Invalid date"); + + return date::make_zoned(timeZone, date::local_days{yearMonthDay} + std::chrono::hours(dateTime.hour) + std::chrono::minutes(dateTime.min) + std::chrono::seconds(dateTime.sec)).get_sys_time(); +} + +int GetTimestamp() +{ + return std::time(nullptr); +} + +int GetUTCOffset() +{ + std::time_t current_time; + std::time(¤t_time); + struct std::tm *timeinfo = std::localtime(¤t_time); + return timeinfo->tm_gmtoff; +} + +std::string GetTimeString() +{ + return GetTimeString(std::chrono::system_clock::now()); +} + +std::string GetTimeString(const std::chrono::system_clock::time_point& timePoint) +{ + auto time_t = std::chrono::system_clock::to_time_t(timePoint); + auto tm = *std::localtime(&time_t); + + char buffer[80]; + strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", &tm); + return std::string(buffer); +} + +} // namespace DateTime diff --git a/DateTime/Makefile b/DateTime/Makefile new file mode 120000 index 0000000..d0b0e8e --- /dev/null +++ b/DateTime/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/Libraries/date b/Libraries/date new file mode 120000 index 0000000..4027c16 --- /dev/null +++ b/Libraries/date @@ -0,0 +1 @@ +../../date \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 120000 index 0000000..6aa5187 --- /dev/null +++ b/Makefile @@ -0,0 +1 @@ +Makefiles/Makefile \ No newline at end of file diff --git a/Makefile.conf b/Makefile.conf new file mode 100644 index 0000000..859f12a --- /dev/null +++ b/Makefile.conf @@ -0,0 +1,11 @@ +# +# Makefile.conf +# + +CFLAGS += -I$(ROOTPATH)/Libraries/date/include + +LFLAGS += -lDateTime +LFLAGS += -L$(ROOTPATH)/lib/$(ARCH) +CFLAGS += -I$(ROOTPATH) -I$(ROOTPATH)/include + +DEBUGDIR := .debug diff --git a/Makefile.target b/Makefile.target new file mode 100644 index 0000000..0706dcd --- /dev/null +++ b/Makefile.target @@ -0,0 +1,12 @@ +# +# Makefile.target +# + +DateTime.a.$(ARCH) : $(OBJECTS) + $(call build_target_library_arch,$@,$^) +DateTime.a: + $(call build_target,$@) + +.DEFAULT_GOAL := DateTime.a + +TARGETS += DateTime.a diff --git a/Makefiles b/Makefiles new file mode 160000 index 0000000..cd9ef1a --- /dev/null +++ b/Makefiles @@ -0,0 +1 @@ +Subproject commit cd9ef1a1b0f7b88f36b0c51b4209d1859aca83aa diff --git a/include/DateTime.h b/include/DateTime.h new file mode 100644 index 0000000..33bc3de --- /dev/null +++ b/include/DateTime.h @@ -0,0 +1,34 @@ +#ifndef DATETIME_H +#define DATETIME_H + +#include "date.h" +#include "tz.h" +#include +#include + + +namespace DateTime { + +struct DateTime +{ + DateTime(int year, unsigned month, unsigned day) : year(year), month(month), day(day) {} + int year; + unsigned month; + unsigned day; + int hour = 0; + int min = 0; + int sec = 0; +}; + +std::chrono::system_clock::time_point DateTime_UTC_to_time_point(const DateTime& dt); +std::chrono::system_clock::time_point DateTime_to_time_point(const DateTime& dt, const date::time_zone* tzone); + +int GetTimestamp(); +int GetUTCOffset(); + +std::string GetTimeString(); +std::string GetTimeString(const std::chrono::system_clock::time_point& timePoint); + +} // namespace DateTime + +#endif // DATETIME_H diff --git a/include/chrono_io.h b/include/chrono_io.h new file mode 120000 index 0000000..372f1cd --- /dev/null +++ b/include/chrono_io.h @@ -0,0 +1 @@ +../../date/include/date/chrono_io.h \ No newline at end of file diff --git a/include/date.h b/include/date.h new file mode 120000 index 0000000..7c1e23a --- /dev/null +++ b/include/date.h @@ -0,0 +1 @@ +../../date/include/date/date.h \ No newline at end of file diff --git a/include/ios.h b/include/ios.h new file mode 120000 index 0000000..2f93d63 --- /dev/null +++ b/include/ios.h @@ -0,0 +1 @@ +../../date/include/date/ios.h \ No newline at end of file diff --git a/include/islamic.h b/include/islamic.h new file mode 120000 index 0000000..4e482ee --- /dev/null +++ b/include/islamic.h @@ -0,0 +1 @@ +../../date/include/date/islamic.h \ No newline at end of file diff --git a/include/iso_week.h b/include/iso_week.h new file mode 120000 index 0000000..b82cec1 --- /dev/null +++ b/include/iso_week.h @@ -0,0 +1 @@ +../../date/include/date/iso_week.h \ No newline at end of file diff --git a/include/julian.h b/include/julian.h new file mode 120000 index 0000000..2d0e0a6 --- /dev/null +++ b/include/julian.h @@ -0,0 +1 @@ +../../date/include/date/julian.h \ No newline at end of file diff --git a/include/ptz.h b/include/ptz.h new file mode 120000 index 0000000..59c49fe --- /dev/null +++ b/include/ptz.h @@ -0,0 +1 @@ +../../date/include/date/ptz.h \ No newline at end of file diff --git a/include/solar_hijri.h b/include/solar_hijri.h new file mode 120000 index 0000000..3918d71 --- /dev/null +++ b/include/solar_hijri.h @@ -0,0 +1 @@ +../../date/include/date/solar_hijri.h \ No newline at end of file diff --git a/include/tz.h b/include/tz.h new file mode 120000 index 0000000..217b837 --- /dev/null +++ b/include/tz.h @@ -0,0 +1 @@ +../../date/include/date/tz.h \ No newline at end of file diff --git a/include/tz_private.h b/include/tz_private.h new file mode 120000 index 0000000..7aec5f5 --- /dev/null +++ b/include/tz_private.h @@ -0,0 +1 @@ +../../date/include/date/tz_private.h \ No newline at end of file