|
@@ -288,12 +288,117 @@ namespace TEAMModelOS.SDK
|
|
|
return (yearGrades, yearGrades.Select(z=>z.Value).ToHashSet());
|
|
|
}
|
|
|
|
|
|
+ public static (Semester currSemester, int studyYear, DateTimeOffset date, DateTimeOffset nextSemester) GetSemesterNew(Period period, long timestamp = 0, string time = null)
|
|
|
+ {
|
|
|
+ //string time = "2023/05-11";
|
|
|
+ DateTimeOffset date = DateTimeOffset.Now;
|
|
|
+ if (timestamp > 1000000000)
|
|
|
+ {
|
|
|
+ //毫秒级
|
|
|
+ if (timestamp > 1000000000000)
|
|
|
+ {
|
|
|
+ date = DateTimeOffset.FromUnixTimeMilliseconds(timestamp);
|
|
|
+ }
|
|
|
+ //秒级
|
|
|
+ else
|
|
|
+ {
|
|
|
+ date = DateTimeOffset.FromUnixTimeSeconds(timestamp);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!(!string.IsNullOrWhiteSpace(time) && DateTimeOffset.TryParse(time, out date)))
|
|
|
+ {
|
|
|
+ date = DateTimeOffset.UtcNow;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ int Day = date.Day;
|
|
|
+ int Month = date.Month;
|
|
|
+ int Year = date.Year;
|
|
|
+ string sm = "09";
|
|
|
+ string sd = "01";
|
|
|
+ int start = int.Parse($"{Year}{sm}{sd}");
|
|
|
+ var se = period.semesters.Find(x => x.start == 1);
|
|
|
+ if (se == null)
|
|
|
+ {
|
|
|
+ se = period.semesters.First();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (se != null)
|
|
|
+ {
|
|
|
+ sm = se.month >= 10 ? $"{se.month}" : $"0{se.month}";
|
|
|
+ sd = se.day >= 10 ? $"{se.day}" : $"0{se.day}";
|
|
|
+ start = int.Parse($"{Year}{sm}{sd}");
|
|
|
+ }
|
|
|
+ int curr = int.Parse(date.ToString("yyyyMMdd"));
|
|
|
+ //新学年开学时间大于当前时间,计算年级需要减1 20220901-20220408 > 0 则当前20220408是2021年入学的,
|
|
|
+ //当前时间大于新学年开学时间,计算年级则不需要 20220901-20221203 < 0 则当前20221203是2022年入学的,
|
|
|
+ //20230901-20230101 > 0 则当前20230101是2022年入学的,
|
|
|
+ int dis = start - curr;
|
|
|
+ //学年
|
|
|
+ int studyYear = date.Year;
|
|
|
+ if (dis > 0)
|
|
|
+ {
|
|
|
+ studyYear = Year - 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ studyYear = Year;
|
|
|
+ }
|
|
|
+ Semester semester = null;
|
|
|
+ //当前学期的下一个学期,默认加180天
|
|
|
+ DateTimeOffset nextSemester = date.AddDays(180);
|
|
|
+ var sortSemesters = SortSemester(period.semesters);
|
|
|
+ int len = sortSemesters.Count;
|
|
|
+ for (int i = 0; i < len; i++)
|
|
|
+ {
|
|
|
+ int next = i + 1;
|
|
|
+ if (next>= len)
|
|
|
+ {
|
|
|
+ semester = sortSemesters[i];
|
|
|
+ nextSemester = DateTimeOffset.Parse($"{studyYear+1}/{sortSemesters[0].month}/{sortSemesters[0].day}");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+
|
|
|
+ var fdate = DateTimeOffset.Parse($"{studyYear}/{sortSemesters[i].month}/{sortSemesters[i].day}");
|
|
|
+ long lf = fdate.ToUnixTimeSeconds();
|
|
|
+ var ndate = DateTimeOffset.Parse($"{studyYear}/{sortSemesters[next].month}/{sortSemesters[next].day}");
|
|
|
+ long ln = ndate.ToUnixTimeSeconds();
|
|
|
+ //代表有跨年
|
|
|
+ if (lf > ln)
|
|
|
+ {
|
|
|
+ ndate = DateTimeOffset.Parse($"{studyYear+1}/{sortSemesters[next].month}/{sortSemesters[next].day}");
|
|
|
+ ln = ndate.ToUnixTimeSeconds();
|
|
|
+ }
|
|
|
+ var cdate = DateTimeOffset.Parse($"{Year}/{Month}/{Day}");
|
|
|
+ long lc = cdate.ToUnixTimeSeconds();
|
|
|
+ if (lc >= lf && lc < ln)
|
|
|
+ {
|
|
|
+ semester = sortSemesters[i];
|
|
|
+ nextSemester = DateTimeOffset.Parse($"{studyYear+1}/{sortSemesters[next].month}/{sortSemesters[next].day}");
|
|
|
+ //nextSemester = sortSemesters[next];
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //if (sortSemesters[i].month <=Month && sortSemesters[i].day >= Day && sortSemesters[next].month < Month && sortSemesters[next].day < Day)
|
|
|
+ //{
|
|
|
+
|
|
|
+ // semester = sortSemesters[i];
|
|
|
+ // nextSemester = DateTimeOffset.Parse($"{studyYear}/{sortSemesters[next].month}/{sortSemesters[next].day}");
|
|
|
+ // break;
|
|
|
+ //}
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return (semester, studyYear, date, nextSemester);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 根据指定时间或者当前时间获取学期信息
|
|
|
/// </summary>
|
|
|
/// <param name="semesterList"></param>
|
|
|
/// <returns></returns>
|
|
|
- public static (Semester currSemester, int studyYear, DateTimeOffset date, DateTimeOffset nextSemester) GetSemester( Period period, long timestamp = 0, string time =null) {
|
|
|
+ public static (Semester currSemester, int studyYear, DateTimeOffset currSemesterDate, DateTimeOffset date, DateTimeOffset nextSemester) GetSemester( Period period, long timestamp = 0, string time =null) {
|
|
|
//string time = "2023/05-11";
|
|
|
DateTimeOffset date = default;
|
|
|
if (timestamp > 1000000000) {
|
|
@@ -309,9 +414,7 @@ namespace TEAMModelOS.SDK
|
|
|
}
|
|
|
if (!(!string.IsNullOrWhiteSpace(time) && DateTimeOffset.TryParse(time, out date)))
|
|
|
{
|
|
|
- //date = DateTimeOffset.FromUnixTimeSeconds(1672506061);
|
|
|
- //date = DateTimeOffset.UtcNow;
|
|
|
- date = DateTimeOffset.FromUnixTimeSeconds(1662688000);
|
|
|
+ date = DateTimeOffset.UtcNow;
|
|
|
}
|
|
|
//年级算法
|
|
|
//var period = school.period.Find(x => x.id.Equals(periodId));
|
|
@@ -352,14 +455,21 @@ namespace TEAMModelOS.SDK
|
|
|
Semester semester= null;
|
|
|
//当前学期的下一个学期,默认加180天
|
|
|
DateTimeOffset nextSemester = date.AddDays(180);
|
|
|
+ DateTimeOffset currSemesterDate = default;
|
|
|
var sortSemesters= SortSemester(period.semesters);
|
|
|
int len = sortSemesters.Count;
|
|
|
+ int currSemesterYear = studyYear;
|
|
|
for (int i = 0; i < len; i++) {
|
|
|
int next= i + 1;
|
|
|
if (next>= len)
|
|
|
{
|
|
|
semester = sortSemesters[i];
|
|
|
+
|
|
|
nextSemester = DateTimeOffset.Parse($"{studyYear+1}/{sortSemesters[0].month}/{sortSemesters[0].day}");
|
|
|
+ currSemesterDate=DateTimeOffset.Parse($"{currSemesterYear}/{semester.month}/{semester.day}");
|
|
|
+ if (currSemesterDate.Subtract(nextSemester).TotalDays>0) {
|
|
|
+ currSemesterDate=DateTimeOffset.Parse($"{currSemesterYear-1}/{semester.month}/{semester.day}");
|
|
|
+ }
|
|
|
break;
|
|
|
}
|
|
|
else {
|
|
@@ -370,6 +480,7 @@ namespace TEAMModelOS.SDK
|
|
|
long ln = ndate.ToUnixTimeSeconds();
|
|
|
//代表有跨年
|
|
|
if (lf > ln) {
|
|
|
+ currSemesterYear=studyYear+1;
|
|
|
ndate = DateTimeOffset.Parse($"{studyYear+1}/{sortSemesters[next].month}/{sortSemesters[next].day}");
|
|
|
ln = ndate.ToUnixTimeSeconds();
|
|
|
}
|
|
@@ -378,7 +489,11 @@ namespace TEAMModelOS.SDK
|
|
|
if (lc >= lf && lc < ln) {
|
|
|
semester = sortSemesters[i];
|
|
|
nextSemester = DateTimeOffset.Parse($"{studyYear+1}/{sortSemesters[next].month}/{sortSemesters[next].day}");
|
|
|
- //nextSemester = sortSemesters[next];
|
|
|
+ currSemesterDate=DateTimeOffset.Parse($"{currSemesterYear}/{semester.month}/{semester.day}");
|
|
|
+ if (currSemesterDate.Subtract(nextSemester).TotalDays>0)
|
|
|
+ {
|
|
|
+ currSemesterDate=DateTimeOffset.Parse($"{currSemesterYear-1}/{semester.month}/{semester.day}");
|
|
|
+ }
|
|
|
break;
|
|
|
}
|
|
|
//if (sortSemesters[i].month <=Month && sortSemesters[i].day >= Day && sortSemesters[next].month < Month && sortSemesters[next].day < Day)
|
|
@@ -390,7 +505,7 @@ namespace TEAMModelOS.SDK
|
|
|
//}
|
|
|
}
|
|
|
}
|
|
|
- return (semester,studyYear,date, nextSemester);
|
|
|
+ return (semester,studyYear, currSemesterDate, date, nextSemester);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|