如何在 C# 中获取今天上午 9 点的 PST 纪元 [重复]
Posted
技术标签:
【中文标题】如何在 C# 中获取今天上午 9 点的 PST 纪元 [重复]【英文标题】:How to get today's 9am PST epoch in C# [duplicate] 【发布时间】:2018-12-19 09:23:51 【问题描述】:我想知道从 1970 年 1 月 1 日到今天太平洋标准时间上午 9 点已经过去了多少秒。如何在 C# 中做到这一点?
我在前端应用程序中需要这个,每个设备都可以有不同的时区。但无论如何,我需要从当天的太平洋标准时间上午 9 点开始经过几秒钟。
【问题讨论】:
这不是重复的,因为我的问题与时区有关。 它们是一样的。因为每个 PST 都与 Utc 等效。 DateTime 是 Unspecified、Local 或 Utc。您应该只保留 Utc 中的所有内容,并在需要在时区显示时使用时区信息进行转换。 【参考方案1】:如果您的服务器设置为使用 PST 时间,那么您可以执行以下操作
是这样的:
TimeSpan test = DateTime.Now - new DateTime(1970, 01, 01);
MessageBox.Show(test.TotalSeconds.ToString());
对于一个班轮:
MessageBox.Show((DateTime.Now - new DateTime(1970, 01, 01))
.TotalSeconds.ToString());
如果您不能保证在您的代码将运行的计算机上使用 PST,您可以像这样声明时区
var zone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
var utcNow = DateTime.UtcNow;
var pacificNow = TimeZoneInfo.ConvertTimeFromUtc(utcNow, zone);
MessageBox.Show((pacificNow - new DateTime(1970, 01, 01))
.TotalSeconds.ToString());
希望对你有帮助
【讨论】:
请看我的问题。我已经添加了详细信息。 @PaulF 它不是重复的。注意时区。 @NarekAghekyan :不是我将其标记为重复 - 只是评论答案是从该答案直接剪切和粘贴而不归因于原始海报的事实。 @Fuzzybear 感谢您的回答,但它将我的时间转换为 PST 时区。我想要的是今天的太平洋标准时间上午 9 点转换为纪元。 如果您是在今天太平洋标准时间上午 9 点之后的纪元时间,那么输入它作为 pacificNow 的值...您是否希望每天都这样做.. 即明天您想要从明天上午 9 点开始的纪元时间? 【参考方案2】: TimeZoneInfo destTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
int timeZoneDiffSeconds = (int) destTimeZone.BaseUtcOffset.Subtract(TimeZoneInfo.Local.BaseUtcOffset).TotalSeconds;
DateTime todayLocal9Am = DateTime.Today.Date + new TimeSpan(9, 0, 0);
Int32 unix9AmLocalTime = (Int32) (todayLocal9Am.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
Int32 unix9AmPstTime = unix9AmLocalTime - Math.Abs(timeZoneDiffSeconds);
Console.WriteLine(unix9AmPstTime);
Console.Read();
【讨论】:
但这将是当前用户的上午 9 点,而不是太平洋标准时间的绝对上午 9 点。 您应该获得本地时区 BaseUtcOffset 和自己的时区 BaseUtcOffset 之间的总秒差,并使用主题计算 unix 时间。代码改了,检查一下。以上是关于如何在 C# 中获取今天上午 9 点的 PST 纪元 [重复]的主要内容,如果未能解决你的问题,请参考以下文章