date::YearDay()
authorArjen Baart <arjen@andromeda.nl>
Sat, 16 Nov 2019 17:22:38 +0000 (18:22 +0100)
committerArjen Baart <arjen@andromeda.nl>
Sat, 16 Nov 2019 17:22:38 +0000 (18:22 +0100)
src/date.cpp
src/date.h
test/date_attributes.cpp
test/date_attributes.exp

index c9c59b6..f9dd5ac 100644 (file)
@@ -119,6 +119,34 @@ unsigned date::DaysInMonth(void)
    return days;
 }
  
+String date::MonthName(void)
+{
+   if (month <= 12)
+   {
+      return String(abr_month_name[month]);
+   }
+   else
+   {
+      return String("xxx");
+   }
+}
+
+unsigned date::YearDay(void)
+{
+   unsigned days = 0;
+
+   if (proper())
+   {
+      for (unsigned m = 1; m < month; m++)
+      {
+         days += date(1, m, year).DaysInMonth();
+      }
+      days += day;
+   }
+
+   return days;
+}
+
 date date::add(date D)
 {
    year += D.year;
@@ -329,18 +357,6 @@ std::istream &operator>>(std::istream &s, date &d)
    return s;
 }
 
-String date::MonthName(void)
-{
-   if (month <= 12)
-   {
-      return String(abr_month_name[month]);
-   }
-   else
-   {
-      return String("xxx");
-   }
-}
-
 String date::format(const char *fmt)
 {
    String  s;
index 1927b5e..2a7f3e1 100644 (file)
@@ -215,6 +215,8 @@ public:
 
    int Leap(void);
    unsigned DaysInMonth();
+   unsigned YearDay();
+    // TODO:YearDay WeekDay WeekNumber DayName
 
 //   date operator*(double)
 //   date& operator*=(double)
index 44204d4..653eb42 100644 (file)
@@ -28,10 +28,18 @@ int main()
    std::cout << d0 << " Leap = " << d0.Leap() << "\n";
    assert(d0.Leap() == 0);
 
+   std::cout << d0 << " YearDay = " << d0.YearDay() << "\n";
+   std::cout.flush();
+   assert(d0.YearDay() == 160);
+
    date   d1(9, 6, 2020);
    std::cout << d1 << " Leap = " << d1.Leap() << "\n";
    assert(d1.Leap() == 1);
 
+   std::cout << d1 << " YearDay = " << d1.YearDay() << "\n";
+   std::cout.flush();
+   assert(d1.YearDay() == 161);
+
    date   d2(9, 6, 2000);
    std::cout << d2 << " Leap = " << d2.Leap() << "\n";
    assert(d2.Leap() == 1);
@@ -44,6 +52,10 @@ int main()
    std::cout << d4.MonthName() << " " << d4.Year() << " has " << d4.DaysInMonth() << " days.\n";
    assert(d4.DaysInMonth() == 31);
 
+   std::cout << d4 << " YearDay = " << d4.YearDay() << "\n";
+   std::cout.flush();
+   assert(d4.YearDay() == 1);
+
    date   d5(1, 2, 2019);
    std::cout << d5.MonthName() << " " << d5.Year() << " has " << d5.DaysInMonth() << " days.\n";
    assert(d5.DaysInMonth() == 28);
@@ -52,6 +64,10 @@ int main()
    std::cout << d6.MonthName() << " " << d6.Year() << " has " << d6.DaysInMonth() << " days.\n";
    assert(d6.DaysInMonth() == 29);
 
+   std::cout << d6 << " YearDay = " << d6.YearDay() << "\n";
+   std::cout.flush();
+   assert(d6.YearDay() == 32);
+
    return 0;
 }
 
index 6a95164..686bc4f 100644 (file)
@@ -3,10 +3,14 @@
 09-06-2019 Monthname = Jun
 09-06-2019 Year = 2019
 09-06-2019 Leap = 0
+09-06-2019 YearDay = 160
 09-06-2020 Leap = 1
+09-06-2020 YearDay = 161
 09-06-2000 Leap = 1
 09-06-2100 Leap = 0
 Jan 2019 has 31 days.
+01-01-2019 YearDay = 1
 Feb 2019 has 28 days.
 Feb 2020 has 29 days.
+01-02-2020 YearDay = 32
 PASS date_attributes (exit status: 0)