263 lines
8.6 KiB
Plaintext
263 lines
8.6 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: FileName mk_inc_time.nss
|
|
//:: Copyright (c) 2008 Kamiryn
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Kamiryn
|
|
//:: Created On: 07.03.2008
|
|
//:://////////////////////////////////////////////
|
|
|
|
const string g_sDateZero = "mk_datezero";
|
|
|
|
struct mk_datetime
|
|
{
|
|
int nYear;
|
|
int nMonth;
|
|
int nDay;
|
|
int nHour;
|
|
int nMinutes;
|
|
int nSeconds;
|
|
int nMilliSeconds;
|
|
};
|
|
|
|
// time stamp is in minutes since 'DateZero'.
|
|
|
|
// initializes 'DateZero' with current time,
|
|
// should be called once before any of the other functions gets used
|
|
// returns DateZero
|
|
struct mk_datetime mk_initTimeStamp();
|
|
|
|
// returns current time as time stamp
|
|
float mk_getCurrentTimeStamp();
|
|
|
|
// deletes time stamp on oObject
|
|
void mk_deleteTimeStampOnObject(object oObject, string sVarName);
|
|
|
|
// writes current time as time stamp on object oObject storing it in sVarName
|
|
void mk_writeTimeStampToObject(object oObject, string sVarName);
|
|
|
|
// returns time stamp stored in sVarName on object oObject
|
|
float mk_getTimeStampFromObject(object oObject, string sVarName);
|
|
|
|
// returns time passed since time stamp sVarName was written on oObject
|
|
float mk_getTimeSinceTimeStamp(object oObject, string sVarName);
|
|
|
|
// returns time stamp as datetime span (datetime span = time stamp)
|
|
struct mk_datetime mk_timeStampToDateTimeSpan(float fTimeStamp);
|
|
|
|
// returns time stamp as datetime (datetime = DateZero + time stamp)
|
|
struct mk_datetime mk_timeStampToDateTime(float fTimeStamp);
|
|
|
|
// returns date1 + date2
|
|
struct mk_datetime mk_addDateTime(struct mk_datetime date1, struct mk_datetime date2);
|
|
|
|
// returns datetime span as readable string
|
|
string mk_formatDateTimeSpan(struct mk_datetime datetime);
|
|
|
|
// returnd datetime as readable string
|
|
string mk_formatDateTime(struct mk_datetime datetime);
|
|
|
|
float fHourToMinutes = HoursToSeconds(1) / 60.0f;
|
|
|
|
const float fYearToHours = 8064.0f; // 8064 = 12.0f*28.0f*24.0f;
|
|
const float fMonthToHours = 672.0f; // 672 = 28.0f*24.0f;
|
|
const float fDayToHours = 24.0f;
|
|
|
|
struct mk_datetime mk_initTimeStamp()
|
|
{
|
|
string strZeroDate = GetLocalString(GetModule(), "MK_ZERODATE");
|
|
if (strZeroDate == "")
|
|
{
|
|
strZeroDate = FloatToString(IntToFloat(GetCalendarYear()),5,0) +
|
|
FloatToString(IntToFloat(GetCalendarMonth()),2,0) +
|
|
FloatToString(IntToFloat(GetCalendarDay()),2,0) +
|
|
FloatToString(IntToFloat(GetTimeHour()),2,0);
|
|
SetLocalString(GetModule(), "MK_ZERODATE", strZeroDate);
|
|
}
|
|
|
|
struct mk_datetime datetime;
|
|
datetime.nYear = StringToInt(GetSubString(strZeroDate,0,5));
|
|
datetime.nMonth = StringToInt(GetSubString(strZeroDate,5,2));
|
|
datetime.nDay = StringToInt(GetSubString(strZeroDate,7,2));
|
|
datetime.nHour = StringToInt(GetSubString(strZeroDate,9,2));
|
|
datetime.nMinutes = 0;
|
|
datetime.nSeconds = 0;
|
|
datetime.nMilliSeconds = 0;
|
|
|
|
return datetime;
|
|
}
|
|
|
|
float mk_getCurrentTimeStamp()
|
|
{
|
|
struct mk_datetime datetime = mk_initTimeStamp();
|
|
|
|
float fYear = IntToFloat(GetCalendarYear() - datetime.nYear);
|
|
|
|
float fMonth = IntToFloat(GetCalendarMonth() - datetime.nMonth);
|
|
float fDay = IntToFloat(GetCalendarDay() - datetime.nDay);
|
|
float fHour = IntToFloat(GetTimeHour() - datetime.nHour);
|
|
float fMinute = IntToFloat(GetTimeMinute());
|
|
float fSecond = IntToFloat(GetTimeSecond()) + IntToFloat(GetTimeMillisecond())/1000.0;
|
|
/*
|
|
SendMessageToPC(GetFirstPC(),
|
|
FloatToString(fYear,8,0)+
|
|
FloatToString(fMonth,3,0)+
|
|
FloatToString(fDay,3,0)+
|
|
FloatToString(fHour,3,0)+
|
|
FloatToString(fMinute,3,0)+
|
|
FloatToString(fSecond,3,0));
|
|
*/
|
|
float fTimeStamp =
|
|
(
|
|
(
|
|
(
|
|
(
|
|
(
|
|
(fYear * 12.0) + fMonth
|
|
) * 28.0
|
|
) + fDay
|
|
) * 24.0
|
|
) + fHour
|
|
) + ((fSecond / 60.0) + fMinute) / fHourToMinutes;
|
|
|
|
return fTimeStamp;
|
|
}
|
|
|
|
void mk_deleteTimeStampOnObject(object oObject, string sVarName)
|
|
{
|
|
DeleteLocalFloat(oObject, sVarName);
|
|
}
|
|
|
|
void mk_writeTimeStampToObject(object oObject, string sVarName)
|
|
{
|
|
if (!GetIsObjectValid(oObject)) return;
|
|
|
|
float fTimeStamp = mk_getCurrentTimeStamp();
|
|
|
|
SetLocalFloat(oObject, sVarName, fTimeStamp);
|
|
|
|
/* SendMessageToPC(oObject,"mk_writeTimeStampToObject: "+
|
|
FloatToString(fTimeStamp,17,5)); */
|
|
}
|
|
|
|
float mk_getTimeStampFromObject(object oObject, string sVarName)
|
|
{
|
|
float fTimeStamp = GetLocalFloat(oObject,sVarName);
|
|
|
|
/* SendMessageToPC(oObject,"mk_getTimeStampFromObject: "+
|
|
FloatToString(fTimeStamp,17,5));*/
|
|
|
|
return fTimeStamp;
|
|
}
|
|
|
|
float mk_getTimeSinceTimeStamp(object oObject, string sVarName)
|
|
{
|
|
float fCurrentTimeStamp = mk_getCurrentTimeStamp();
|
|
|
|
/* SendMessageToPC(oObject,"mk_getCurrentTimeStamp: "+
|
|
FloatToString(fCurrentTimeStamp,17,5));*/
|
|
|
|
float fTimeStamp = mk_getTimeStampFromObject(oObject,sVarName);
|
|
|
|
/* SendMessageToPC(oObject,"mk_getTimeSinceTimeStamp: "+
|
|
FloatToString(fCurrentTimeStamp - fTimeStamp,17,5));*/
|
|
|
|
return fCurrentTimeStamp - fTimeStamp;
|
|
}
|
|
|
|
struct mk_datetime mk_timeStampToDateTimeSpan(float fTimeStamp)
|
|
{
|
|
struct mk_datetime datetime;
|
|
|
|
float fMinSec = fTimeStamp - IntToFloat(FloatToInt(fTimeStamp));
|
|
int nMinutes = FloatToInt(fMinSec*fHourToMinutes);
|
|
float fSeconds = (fMinSec*fHourToMinutes - IntToFloat(nMinutes))*60.0;
|
|
|
|
int nSeconds = FloatToInt(fSeconds);
|
|
int nMilliSeconds = FloatToInt((fSeconds - IntToFloat(nSeconds))*1000.0);
|
|
|
|
// SendMessageToPC(GetFirstPC(), "fMinSec : "+FloatToString(fMinSec));
|
|
// SendMessageToPC(GetFirstPC(), "fMinSec2: "+FloatToString((IntToFloat(nSeconds)/60.0 + IntToFloat(nMinutes))/fHourToMinutes));
|
|
|
|
int nYear = FloatToInt(fTimeStamp / fYearToHours);
|
|
int nMonth = FloatToInt((fTimeStamp - IntToFloat(nYear)*fYearToHours) / fMonthToHours);
|
|
int nDay = FloatToInt((fTimeStamp - IntToFloat(nYear)*fYearToHours - IntToFloat(nMonth)*fMonthToHours) / fDayToHours);
|
|
int nHour = FloatToInt(fTimeStamp - IntToFloat(nYear)*fYearToHours - IntToFloat(nMonth)*fMonthToHours - IntToFloat(nDay)*fDayToHours);
|
|
|
|
datetime.nYear = nYear;
|
|
datetime.nMonth = nMonth;
|
|
datetime.nDay = nDay;
|
|
datetime.nHour = nHour;
|
|
datetime.nMinutes = nMinutes;
|
|
datetime.nSeconds = nSeconds;
|
|
datetime.nMilliSeconds = nMilliSeconds;
|
|
|
|
return datetime;
|
|
}
|
|
|
|
struct mk_datetime mk_addDateTime(struct mk_datetime date1, struct mk_datetime date2)
|
|
{
|
|
struct mk_datetime date;
|
|
date.nMilliSeconds = (date1.nMilliSeconds + date2.nMilliSeconds) % 1000;
|
|
date.nSeconds = (date1.nSeconds + date2.nSeconds
|
|
+ (date1.nMilliSeconds + date2.nMilliSeconds) / 1000) % 60;
|
|
date.nMinutes = (date1.nMinutes + date2.nMinutes
|
|
+ (date1.nSeconds + date2.nSeconds) / 60) % FloatToInt(fHourToMinutes)
|
|
;
|
|
date.nHour = (date1.nHour + date2.nHour
|
|
+ (date1.nMinutes + date2.nMinutes) / FloatToInt(fHourToMinutes)) % 24;
|
|
|
|
date.nDay = (date1.nDay + date2.nDay + (date1.nHour + date2.nHour)/24 - 1) % 28 + 1;
|
|
|
|
date.nMonth = (date1.nMonth + date2.nMonth + (date1.nDay + date2.nDay - 1) / 28 - 1) % 12 + 1;
|
|
|
|
date.nYear = (date1.nYear + date2.nYear + (date1.nMonth + date2.nMonth - 1) / 12);
|
|
|
|
return date;
|
|
}
|
|
|
|
|
|
struct mk_datetime mk_timeStampToDateTime(float fTimeStamp)
|
|
{
|
|
return mk_addDateTime(mk_initTimeStamp(),mk_timeStampToDateTimeSpan(fTimeStamp));
|
|
}
|
|
|
|
string mk_formatDateTimeSpan(struct mk_datetime datetime)
|
|
{
|
|
string sDateTimeSpan =
|
|
(datetime.nYear>0 ? IntToString(datetime.nYear)+" years, " : "")+
|
|
(datetime.nMonth>0 ? IntToString(datetime.nMonth)+" month, " : "")+
|
|
(datetime.nDay>0 ? IntToString(datetime.nDay)+" days, " : "")+
|
|
(datetime.nHour>0 ? IntToString(datetime.nHour)+" hours, " : "")+
|
|
(datetime.nMinutes>0 ? IntToString(datetime.nMinutes)+" minutes, " : "")+
|
|
(datetime.nSeconds>0 ? IntToString(datetime.nSeconds)+" seconds, " : "")+
|
|
(datetime.nMilliSeconds>0 ? IntToString(datetime.nMilliSeconds)+" milliseconds, " : "");
|
|
|
|
|
|
return GetStringLeft(sDateTimeSpan, GetStringLength(sDateTimeSpan)-2);
|
|
}
|
|
|
|
string mk_formatDateTime(struct mk_datetime datetime)
|
|
{
|
|
string sDateTime =
|
|
"year "+IntToString(datetime.nYear)+", "+
|
|
"month "+IntToString(datetime.nMonth)+", "+
|
|
"day "+IntToString(datetime.nDay)+", "+
|
|
"hour "+IntToString(datetime.nHour)+", "+
|
|
"minutes "+IntToString(datetime.nMinutes)+", "+
|
|
"seconds "+IntToString(datetime.nSeconds)+", "+
|
|
"seconds "+IntToString(datetime.nMilliSeconds);
|
|
|
|
return sDateTime;
|
|
}
|
|
|
|
/* DO NOT CLOSE THIS TOP COMMENT!
|
|
This main() function is here only for compilation testing.
|
|
void main() {}
|
|
/* */
|
|
|
|
|