我已經轉換和從Unix紀元下面的轉換方法時間戳日期時間轉換爲Unix紀元添加幻影小時
public static class DateTimeHelpers
{
public static DateTime UnixEpoch()
{
return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
}
public static DateTime FromMillisecondsSinceUnixEpoch(long milliseconds)
{
return UnixEpoch().AddMilliseconds(milliseconds).ToLocalTime();
}
public static long ToMillisecondsSinceUnixEpoch(DateTime dateTime)
{
return (long)(dateTime - UnixEpoch()).TotalMilliseconds;
}
}
問題是(男孩,這似乎是基本的東西),我設置一個DateTime
我想然後嘗試轉換爲Unix-Time,但返回的毫秒時間戳爲+01:00小時,我想知道爲什麼?
我使用的代碼是
DateTime startDate = new DateTime(2015, 10, 1, 0, 0, 0, 0, DateTimeKind.Utc);
long startMillis = DateTimeHelpers.ToMillisecondsSinceUnixEpoch(startDate);
這給startMillis = 1443657600000
這是 「星期四2015年10月1日01:00:00(上午)在時區歐洲/倫敦(BST)」。我想從ToMillisecondsSinceUnixEpoch
回到「2015/10/01 00:00:00」的時間戳,我在這裏錯過了什麼?
感謝您的時間。
編輯。我想做一些Java代碼的等價物。這產生了正確的時間戳。爲什麼我可以用Java而不是C#來做到這一點?但無論如何,代碼
private static long ukTimeStringToUtcMillis(String s) {
SimpleDateFormat sdf = makeSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
try {
return sdf.parse(s).getTime();
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
private static SimpleDateFormat makeSimpleDateFormat(String s) {
SimpleDateFormat sdf = new SimpleDateFormat(s);
sdf.setTimeZone(TimeZone.getTimeZone("Europe/London"));
return sdf;
}
我使用這樣的
long timestamp = ukTimeStringToUtcMillis("2015-10-01T00:00:00.000");
這給timestamp = 1443654000000
這是「星期四2015年10月1日00:00:00(上午)在時區歐洲/倫敦(BST) 」。我錯過了什麼C#?我試過
var ukTimeZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
DateTime unixEpoch = TimeZoneInfo.ConvertTime(
new DateTime(1970, 1, 1, 0, 0, 0), ukTimeZone, ukTimeZone);
long startMillis = (long)(startDate - unixEpoch).TotalMilliseconds;
long endMillis = (long)(endDate - unixEpoch).TotalMilliseconds;
這個ADDS一個小時!
'歐洲/倫敦(BST)'現在不是'UTC +01:00'嗎?這是否正常返回'Oct 01 2015 01:00:00'? http://www.epochconverter.com/epoch/timezones.php?epoch=1443657600 –
我正在嘗試做一些C#相當於一些Java。我編輯了這個問題。如果你可以投你的眼睛,這將是最感謝! – MoonKnight
'return UnixEpoch()。AddMilliseconds(milliseconds).ToLocalTime();'你沒有以本地時間開始,所以返回的本地時間將包含TZ偏移量。返回UTC,它使往返罰款。 – Plutonix