using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace XYLEM.Base { internal enum TimeType { UTC, Local }; internal static class TimeConvertClass { /// /// convert to a text showing file time ex. [20151201-135917] /// /// /// internal static string ToFileTimeTxt(this DateTime time) { return String.Format("[{0}{1:00}{2:00}-{3:00}{4:00}{5:00}]", time.Year, time.Month, time.Day, time.Hour, time.Minute, time.Second); } /// /// Convert 1970Sec to 32-bit time to Time /// /// /// internal static TimeSpan ConvertTimeSpan(this UInt32 timeSec) { return new TimeSpan((int)(timeSec/3600), (int)(timeSec%3600/60), (int)(timeSec%60)); } internal static string ConvertSecondsToTimeSpanTxt(this Int32 timeSec) { return (timeSec >= 0 ? "" : "-") + ((UInt32)Math.Abs(timeSec)).ConvertSecondsToTimeSpanTxt(); } internal static string ConvertToTimeSpanTxt(this TimeSpan time) { if (time.Days > 0) { return string.Format((time.Days > 1 ? "{0} days " : "1 day ") + "{1:00}:{2:00}:{3:00}", time.Days, time.Hours, time.Minutes, time.Seconds); } return string.Format("{0:00}:{1:00}:{2:00}", time.Hours, time.Minutes, time.Seconds); } internal static string ConvertSecondsToTimeSpanTxt(this UInt32 timeSec) { TimeSpan time = new TimeSpan((int)(timeSec / 3600), (int)(timeSec % 3600 / 60), (int)(timeSec % 60)); return time.ConvertToTimeSpanTxt(); } internal static string ConvertSecondsToTimeSpanTxt(this Int16 timeSec) { return ConvertSecondsToTimeSpanTxt((Int32)timeSec); } internal static string ConvertSecondsToTimeSpanTxt(this UInt16 timeSec) { return ConvertSecondsToTimeSpanTxt((UInt32)timeSec); } internal static string ConvertMinuteToTimeSpanTxt(this Int16 timeMin) { return ConvertSecondsToTimeSpanTxt((Int32)timeMin * 60); } internal static string ConvertMinuteToTimeSpanTxt(this UInt16 timeMin) { return ConvertSecondsToTimeSpanTxt((UInt32)timeMin * 60); } internal static string ConvertHourToTimeSpanTxt(this Int16 timeHour) { return ConvertSecondsToTimeSpanTxt((Int32)timeHour * 3600); } internal static string ConvertHourToTimeSpanTxt(this UInt16 timeHour) { return ConvertSecondsToTimeSpanTxt((UInt32)timeHour * 3600); } /// /// Convert 1970Sec to 32-bit time to Time /// /// /// internal static DateTime Convert1970SecToTime(this UInt32 timeSec1970, TimeType timetype) { return timetype == TimeType.Local ? (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)).AddSeconds(timeSec1970) : (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).AddSeconds(timeSec1970); } /// /// Convert Time to 1970Sec /// /// /// internal static UInt32 ConvertTimeTo1970Sec(this DateTime time, TimeType timetype) { TimeSpan ts = timetype == TimeType.Local ? (time - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)) : (time.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)); return Convert.ToUInt32(ts.TotalSeconds); } /// /// Convert 2000Sec to 32-bit time to Time /// /// /// internal static DateTime Convert2000SecToTime(this UInt32 timeSec2000) { return (new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc)).AddSeconds(timeSec2000); } /// /// Convert Time to 2000Sec /// /// /// internal static UInt32 ConvertTimeTo2000Sec(this DateTime time, TimeType timetype) { TimeSpan ts = timetype == TimeType.Local ? (time - new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Local)) : (time.ToUniversalTime() - new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc)); return Convert.ToUInt32(ts.TotalSeconds); } /// /// Convert time to a String /// /// /// public static String ToLocalDateTimeString(this DateTime time) { DateTime localTime; localTime = (time.Kind == DateTimeKind.Utc) ? time.ToLocalTime() : time; return (localTime.Year.ToString().PadLeft(4, '0') + "/" + localTime.Month.ToString().PadLeft(2, '0') + "/" + localTime.Day.ToString().PadLeft(2, '0') + " " + localTime.Hour.ToString().PadLeft(2, '0') + ":" + localTime.Minute.ToString().PadLeft(2, '0') + ":" + localTime.Second.ToString().PadLeft(2, '0')); } public static readonly bool IsLocalHourFormatAM_PM = new DateTime(2000, 1, 1, 13, 0, 0).ToLongTimeString().ToLower().Contains("pm"); } }