···44 https://github.com/Jericho1060/DualUniverse/edit/master/TimeScript/TimeScript.lua
55]]--
6677-summer_time = false --export
88-99-function DUCurrentDateTime()
1010- local time = system.getTime()
1111- local additionnal_hour = 0
1212- local seconds_to_2018 = 7948800 --from 01-10-2017 (arkship time)
1313- local secondsInMinute = 60
1414- local secondsInHour = secondsInMinute * 60
1515- local secondsInDay = secondsInHour * 24
1616- local secondsInYear = secondsInDay * 365
1717- local weekDaysNames = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}
1818- local weekDaysShortNames = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}
1919- local monthNames = {"January", "Febuary", "March", "April", "May", "June", "July", "August", "Septrember", "October", "Novermber", "December"}
2020- local monthShortNames = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}
2121- if summer_time then time = time + secondsInHour end
2222- time = time - seconds_to_2018
2323- local weekDayIndex = math.floor(time/secondsInDay)%7
2424- if weekDayIndex == 0 then weekDayIndex = 7 end
2525- local year = 2018
2626- local month = 1
2727- local day = 1
2828- local daysInFebuary = 28
2929- while time >= secondsInYear do
3030- if (year % 4) == 0 then --leap year
3131- if time >= (secondsInYear - secondsInDay) then
3232- year = year + 1
3333- time = time - secondsInYear - secondsInDay
77+function DUCurrentDateTime(utc)
88+ local t = system.getUtcTime()
99+ if not utc then t = t + system.getUtcOffset() end
1010+ local DSEC=24*60*60
1111+ local YSEC=365*DSEC
1212+ local LSEC=YSEC+DSEC
1313+ local FSEC=4*YSEC+DSEC
1414+ local BASE_DOW=4
1515+ local BASE_YEAR=1970
1616+ local _days={-1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333, 364}
1717+ local _lpdays={}
1818+ for i=1,2 do _lpdays[i]=_days[i] end
1919+ for i=3,13 do _lpdays[i]=_days[i]+1 end
2020+ local y,j,m,d,w,h,n,s
2121+ local mdays=_days
2222+ s=t
2323+ y=math.floor(s/FSEC)
2424+ s=s-y*FSEC
2525+ y=y*4+BASE_YEAR
2626+ if s>=YSEC then
2727+ y=y+1
2828+ s=s-YSEC
2929+ if s>=YSEC then
3030+ y=y+1
3131+ s=s-YSEC
3232+ if s>=LSEC then
3333+ y=y+1
3434+ s=s-LSEC
3435 else
3535- local daysInFebuary = 29
3636- break
3636+ mdays=_lpdays
3737 end
3838- else
3939- year = year + 1
4040- time = time - secondsInYear
4138 end
4239 end
4343- local daysFromYearStart = math.floor(time/secondsInDay)
4444- if daysFromYearStart >= 31 then
4545- month = 2
4646- daysFromYearStart = daysFromYearStart - 31
4747- end
4848- if daysFromYearStart >= daysInFebuary then
4949- month = 3
5050- daysFromYearStart = daysFromYearStart - daysInFebuary
5151- end
5252- if daysFromYearStart >= 31 then
5353- month = 4
5454- daysFromYearStart = daysFromYearStart - 31
5555- end
5656- if daysFromYearStart >= 30 then
5757- month = 5
5858- daysFromYearStart = daysFromYearStart - 30
5959- end
6060- if daysFromYearStart >= 31 then
6161- month = 6
6262- daysFromYearStart = daysFromYearStart - 31
6363- end
6464- if daysFromYearStart >= 30 then
6565- month = 7
6666- daysFromYearStart = daysFromYearStart - 30
6767- end
6868- if daysFromYearStart >= 31 then
6969- month = 8
7070- daysFromYearStart = daysFromYearStart - 31
7171- end
7272- if daysFromYearStart >= 31 then
7373- month = 9
7474- daysFromYearStart = daysFromYearStart - 31
7575- end
7676- if daysFromYearStart >= 30 then
7777- month = 10
7878- daysFromYearStart = daysFromYearStart - 30
7979- end
8080- if daysFromYearStart >= 31 then
8181- month = 11
8282- daysFromYearStart = daysFromYearStart - 31
8383- end
8484- if daysFromYearStart >= 30 then
8585- month = 12
8686- daysFromYearStart = daysFromYearStart - 30
8787- end
8888- day = daysFromYearStart
8989- time = time % secondsInDay
9090- local h = math.floor(time/secondsInHour)%24
9191- local m = math.floor(time%secondsInHour/60)
9292- local s = math.floor(time%60)
9393- return year, month, day, h, m, s, weekDayIndex, weekDaysNames[weekDayIndex], weekDaysShortNames[weekDayIndex], monthNames[month], monthShortNames[month]
4040+ j=math.floor(s/DSEC)
4141+ s=s-j*DSEC
4242+ local m=1
4343+ while mdays[m]<j do m=m+1 end
4444+ m=m-1
4545+ local d=j-mdays[m]
4646+ w=(math.floor(t/DSEC)+BASE_DOW)%7
4747+ if w == 0 then w = 7 end
4848+ h=math.floor(s/3600)
4949+ s=s-h*3600
5050+ n=math.floor(s/60)
5151+ function round(a,b)if b then return utils.round(a/b)*b end;return a>=0 and math.floor(a+0.5)or math.ceil(a-0.5)end
5252+ s=round(s-n*60)
5353+ local weekDaysNames = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}
5454+ local weekDaysShortNames = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}
5555+ local monthNames = {"January", "Febuary", "March", "April", "May", "June", "July", "August", "Septrember", "October", "Novermber", "December"}
5656+ local monthShortNames = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}
5757+ return y,m,d,h,n,s,w,weekDaysNames[w],weekDaysShortNames[w],monthNames[m],monthShortNames[m],j+1
9458end
95599660--[[
9797- local year, month, day, hour, minute, second, weekDayIndex, weekDayName, weekDayShortName, monthName, monthShortName = DUCurrentDateTime()
6161+ local year, month, day, hour, minute, second, weekDayIndex, weekDayName, weekDayShortName, monthName, monthShortName, daysFromYearStart = DUCurrentDateTime()
9862 system.print(string.format("%02d/%02d/%04d %02d:%02d:%02d",day,month,year,hour,minute,second))
9963]]