From 4bd08f0355b6b2cf3c027202d5ad301b4e182953 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期五, 31 三月 2023 17:16:22 +0800
Subject: [PATCH] 科目二修改
---
lib/src/main/cpp/utils/xconvert.cpp | 86 ++++++++++++++++++++++++++++++++++---------
1 files changed, 68 insertions(+), 18 deletions(-)
diff --git a/lib/src/main/cpp/utils/xconvert.cpp b/lib/src/main/cpp/utils/xconvert.cpp
index b411ffb..87f3d51 100644
--- a/lib/src/main/cpp/utils/xconvert.cpp
+++ b/lib/src/main/cpp/utils/xconvert.cpp
@@ -22,6 +22,8 @@
#define DAYS_PER_WEEK 7
#define DAYS_PER_YEAR 365
+#define DAYS_UP_TO_1970 ((70*365LU) +17)
+
double ConvertKMh2Ms(int kmh)
{
return ((double)kmh) * 1000.0 / 3600.0;
@@ -86,9 +88,20 @@
}
}
+static int TimeMonthOffset( int leapStatus, uint8_t mon )
+{
+ const int monthOffsets[2][12] =
+ {
+/* jan feb mar apr may jun jul aug sep oct nov dec */
+ {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}, /* regular year */
+ {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335} /* leap year */
+ };
+ return monthOffsets[leapStatus][mon] ;
+}
+
const int LibTimeDays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
-static inline bool TimeYearIsLeap(int year)
+static bool TimeYearIsLeap(int year)
{
if ((year % 4) || year == 2100)
return false;
@@ -113,7 +126,7 @@
for (i = 0; i<(month - 1); i++)
daysThisYear += (int)LibTimeDays[i];
- for (i = 2000; i<year; i++) {
+ for (i = 1970; i<year; i++) {
daysThisYear += 365;
if (TimeYearIsLeap(i))
daysThisYear += 1;
@@ -127,22 +140,59 @@
return (hour*SECONDS_PER_HOUR + minute*SECONDS_PER_MINUTE + second) * 1000 + msecond;
}
-/*********************************************************
- * TIME1 - TIME2: msecond
- * @param hour1
- * @param minute1
- * @param second1
- * @param msecond1
- * @param hour2
- * @param minute2
- * @param second2
- * @param msecond2
- * @return
- */
-uint32_t TimeGetDiff(int hour1, int minute1, int second1, int msecond1, int hour2, int minute2, int second2, int msecond2)
-{
- return (TimeMakeComposite(hour1, minute1, second1, msecond1) + SECONDS_PER_DAY * 1000 -
- TimeMakeComposite(hour2, minute2, second2, msecond2)) % (SECONDS_PER_DAY * 1000);
+void TimeBreakdown(uint32_t SecondsSince1970 , struct TimeStructure *pTS) {
+ uint16_t yearSince1900;
+ uint32_t days;
+ uint32_t daysTillYearStarted;
+ uint32_t secs;
+ bool isLeapYear;
+ uint16_t leapDaysSince1900;
+
+ secs = SecondsSince1970;
+ days = SecondsSince1970 / SECONDS_PER_DAY;
+
+ // 1970.1.1 is Thursday
+ pTS->Wday = (days + 4) % DAYS_PER_WEEK; /* days since Sunday */
+
+ yearSince1900 = (days / DAYS_PER_YEAR) + 70;
+
+ leapDaysSince1900 = (yearSince1900 - 1) / 4;
+
+ if (yearSince1900 > 200)
+ leapDaysSince1900 -= 1;
+
+ daysTillYearStarted = leapDaysSince1900 + (365L * yearSince1900);
+
+ if (days + DAYS_UP_TO_1970 < daysTillYearStarted) {
+ yearSince1900--;
+
+ leapDaysSince1900 = (yearSince1900 - 1) / 4;
+
+ if (yearSince1900 > 200)
+ leapDaysSince1900 -= 1;
+ daysTillYearStarted = leapDaysSince1900 + (365L * yearSince1900);
+ }
+ days = days - (daysTillYearStarted - DAYS_UP_TO_1970);
+
+ pTS->Year = yearSince1900 + 1900;
+ pTS->Yday = days;
+
+ isLeapYear = TimeYearIsLeap(pTS->Year);
+
+ pTS->Month = 12;
+ do {
+ pTS->Month--;
+ } while (days < TimeMonthOffset(isLeapYear? 1 : 0, pTS->Month));
+
+ pTS->Day = days - TimeMonthOffset(isLeapYear? 1: 0, pTS->Month) + 1;
+
+ pTS->Month++;
+
+ secs %= SECONDS_PER_DAY;
+ pTS->Hour = secs / SECONDS_PER_HOUR;
+ secs %= SECONDS_PER_HOUR;
+ pTS->Minute = secs / 60;
+ pTS->Second = secs % 60;
}
vector<string> split(string str, string pattern)
--
Gitblit v1.8.0