laatzen/Common/modbus_master_csharp/Base/Convert1970SecToTime.cs

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");
}
}