154 lines
5.6 KiB
C#
154 lines
5.6 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// convert to a text showing file time ex. [20151201-135917]
|
|
/// </summary>
|
|
/// <param name="time"></param>
|
|
/// <returns></returns>
|
|
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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Convert 1970Sec to 32-bit time to Time
|
|
/// </summary>
|
|
/// <param name="timeSec1970"></param>
|
|
/// <returns></returns>
|
|
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);
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// Convert 1970Sec to 32-bit time to Time
|
|
/// </summary>
|
|
/// <param name="timeSec1970"></param>
|
|
/// <returns></returns>
|
|
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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Convert Time to 1970Sec
|
|
/// </summary>
|
|
/// <param name="time"></param>
|
|
/// <returns></returns>
|
|
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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Convert 2000Sec to 32-bit time to Time
|
|
/// </summary>
|
|
/// <param name="timeSec2000"></param>
|
|
/// <returns></returns>
|
|
internal static DateTime Convert2000SecToTime(this UInt32 timeSec2000)
|
|
{
|
|
return (new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Utc)).AddSeconds(timeSec2000);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Convert Time to 2000Sec
|
|
/// </summary>
|
|
/// <param name="time"></param>
|
|
/// <returns></returns>
|
|
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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Convert time to a String
|
|
/// </summary>
|
|
/// <param name="time"></param>
|
|
/// <returns></returns>
|
|
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");
|
|
}
|
|
}
|
|
|