C# で DateTime を Swatch インターネット時刻に変換する方法を探していました。何も見つかりませんでした。DateTime をビートに変換するにはどうすればよいですか?
編集:解決策が見つかりました。すぐに回答として投稿します:
var time = DateTime.Now; //get the current time
var utc1 = time.ToUniversalTime().AddHours(1); //convert the given DateTime to universal time and add one hour (internet time is based on UTC+1)
var beats = utc1.TimeOfDay.TotalMilliseconds / 86400d; //get the milliseconds of the given day and divide it to the number of seconds of a day
一行で:
var beats = DateTime.Now.ToUniversalTime().AddHours(1).TimeOfDay.TotalMilliseconds / 86400d
DateTime 拡張として:
public static class DateTimeExtensions
{
public static double ToInternetTimeDouble(this DateTime time)
{
return time.ToUniversalTime().AddHours(1).TimeOfDay.TotalMilliseconds / 86400d;
}
public static int ToInternetTimeInt(this DateTime time)
{
return Convert.ToInt32(Math.Floor(time.ToInternetTimeDouble()));
}
public static string ToInternetTimeStr(this DateTime time)
{
return time.ToInternetTimeStr(false);
}
public static string ToInternetTimeStr(this DateTime time, bool decimals)
{
return string.Format(CultureInfo.InvariantCulture, "@{0}", decimals ? string.Format(CultureInfo.InvariantCulture, "{0:0.00}", time.ToInternetTimeDouble()) : time.ToInternetTimeInt().ToString(CultureInfo.InvariantCulture));
}
}