首页 > 代码库 > 时间格式转换类

时间格式转换类



时间格式转换类

   时间的字符串形式与毫秒形式相互转换的类。

using System;
namespace myspace
{
	/// <summary>
	/// 指定若干常数,表示计时格式。
	/// </summary>
	public enum TimingFormat : byte
	{
		/// <summary>
		/// 毫秒。
		/// </summary>
		Ms,

		/// <summary>
		/// 秒
		/// </summary>
		S,

		/// <summary>
		/// 分
		/// </summary>
		M,

		/// <summary>
		/// 时
		/// </summary>
		H,

		/// <summary>
		/// 秒 毫妙
		/// </summary>
		S_Ms,

		/// <summary>
		/// 分 秒
		/// </summary>
		M_S,

		/// <summary>
		/// 时 分
		/// </summary>
		H_M,

		/// <summary>
		/// 分 秒 毫秒
		/// </summary>
		M_S_Ms,

		/// <summary>
		/// 时 分 秒
		/// </summary>
		H_M_S,

		/// <summary>
		/// 时 分 秒 毫秒
		/// </summary>
		H_M_S_Ms
	}

	/// <summary>
	/// 时间的字符串形式与毫秒形式相互转换类。
	/// </summary>
	public static class TimeFormat
	{
		#region 将毫秒形式的时间转化为字符串形式
		/// <summary>
		/// 将毫秒形式的时间转化为字符串形式(00:00:00.000)的某部分或全部。
		/// </summary>
		/// <param name="milliseconds">毫秒数。</param>
		/// <param name="format">时间的某部分</param>
		/// <returns>时间的字符串形式。</returns>
		public static string ToTimeString(ulong milliseconds, TimingFormat format)
		{
			ulong ms = milliseconds % 1000;
			ulong s = milliseconds / 1000;
			ulong h = s / 3600;
			ulong m = (s - (h * 3600)) / 60;
			s = s - (h * 3600 + m * 60);
			switch (format)
			{
				case TimingFormat.Ms:
					return string.Format("{0:D3}", ms);
				case TimingFormat.S:
					return string.Format("{0:D2}", s);
				case TimingFormat.M:
					return string.Format("{0:D2}", m);
				case TimingFormat.H:
					return string.Format("{0:D2}", h);
				case TimingFormat.S_Ms:
					return string.Format("{0:D2}.{1:D3}", s, ms);
				case TimingFormat.M_S:
					return string.Format("{0:D2}:{1:D2}", m, s);
				case TimingFormat.H_M:
					return string.Format("{0:D2}:{1:D2}", h, m);
				case TimingFormat.M_S_Ms:
					return string.Format("{0:D2}:{1:D2}.{2:D3}", m, s, ms);
				case TimingFormat.H_M_S:
					return string.Format("{0:D2}:{1:D2}:{2:D2}", h, m, s);
				default:
					return string.Format("{0:D2}:{1:D2}:{2:D2}.{3:D3}", h, m, s, ms);
			}
		}
		#endregion

		#region 将字符串形式的时间转化为毫秒形式
		/// <summary>
		/// 将字符串形式(00:00:00.000)的某部分或全部转化为毫秒形式的时间。
		/// </summary>
		/// <param name="timeStr">时间的字符串形式。</param>
		/// <param name="format">字符串的格式。</param>
		/// <returns>时间的毫秒形式。</returns>
		public static ulong ToTimeULong(string timeStr, TimingFormat format)
		{
			timeStr = timeStr.Trim();
			switch (format)
			{
				case TimingFormat.H:
					return Convert.ToUInt64(timeStr) * 3600 * 1000;
				case TimingFormat.M:
					return Convert.ToUInt64(timeStr) * 60 * 1000;
				case TimingFormat.S:
					return Convert.ToUInt64(timeStr) * 1000;
				case TimingFormat.Ms:
					return Convert.ToUInt64(timeStr);
				case TimingFormat.S_Ms:
					string[] sms = timeStr.Split('.');
					return ToTimeULong(sms[0], TimingFormat.S) + ToTimeULong(sms[1], TimingFormat.Ms);
				case TimingFormat.M_S:
					string[] ms = timeStr.Split(':');
					return ToTimeULong(ms[0], TimingFormat.M) + ToTimeULong(ms[1], TimingFormat.S);
				case TimingFormat.H_M:
					string[] hm = timeStr.Split(':');
					return ToTimeULong(hm[0], TimingFormat.H) + ToTimeULong(hm[1], TimingFormat.M);
				case TimingFormat.M_S_Ms:
					string[] msms = timeStr.Split(':');
					return ToTimeULong(msms[0], TimingFormat.M) + ToTimeULong(msms[1], TimingFormat.S_Ms);
				case TimingFormat.H_M_S:
					string[] hms = timeStr.Split(':');
					return ToTimeULong(hms[0], TimingFormat.H) + ToTimeULong(hms[1], TimingFormat.M) + ToTimeULong(hms[2], TimingFormat.S);
				default:
					string[] hmsms = timeStr.Split(':');
					return ToTimeULong(hmsms[0], TimingFormat.H) + ToTimeULong(hmsms[1], TimingFormat.M) + ToTimeULong(hmsms[2], TimingFormat.S_Ms);
			}
		}
		#endregion
	}
}

时间格式转换类