OrionUserland
Barry Importing existing Orion Userland 19aefaa (3 years, 3 months ago)
diff --git a/date/main.c b/date/main.c
new file mode 100644
index 0000000..2e35681
--- /dev/null
+++ b/date/main.c
@@ -0,0 +1,39 @@
+#include <stdio.h>
+#include <time.h>
+
+#define LEAP_YEAR(x) ((((x % 4) == 0) && ((x % 100) != 0)) || ((x % 400) == 0))
+
+/* Main function */
+int
+main(int argc, char *argv[])
+{
+ /* Length of months for normal and leap years */
+ const uint16_t monthLen[2][12] = {
+ {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
+ {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
+ };
+
+ uint8_t second, minute, hour, day, month;
+ time_t now = time(NULL);
+ uint32_t year = 1970, dayclock = now % 86400, dayno = now / 86400;
+
+ second = dayclock % 60;
+ minute = (dayclock % 3600) / 60;
+ hour = dayclock / 3600;
+ while (dayno >= (LEAP_YEAR(year) ? 366 : 365)) {
+ dayno -= (LEAP_YEAR(year) ? 366 : 365);
+ year++;
+ }
+ year -= 1970;
+ month = 0;
+ while (dayno >= monthLen[LEAP_YEAR(year)][month]) {
+ dayno -= monthLen[LEAP_YEAR(year)][month];
+ month++;
+ }
+ day = dayno + 1;
+
+ printf("%.4d/%.2d/%.2d %.2d:%.2d:%.2d UTC\n",
+ year+1970, month+1, day+1, hour, minute, second);
+
+ return 0;
+}