C# 用C语言解析unix时间#
有没有一种方法可以在C#中快速/轻松地解析Unix时间?我对这门语言是全新的,所以如果这是一个非常明显的问题,我道歉。IE我有一个字符串,格式为[从纪元算起的秒数][毫秒]。在C#中是否有与Java的SimpleDataFormat等价的格式?万岁!另见 附件:这是来自:C# 用C语言解析unix时间#,c#,unix-timestamp,C#,Unix Timestamp,有没有一种方法可以在C#中快速/轻松地解析Unix时间?我对这门语言是全新的,所以如果这是一个非常明显的问题,我道歉。IE我有一个字符串,格式为[从纪元算起的秒数][毫秒]。在C#中是否有与Java的SimpleDataFormat等价的格式?万岁!另见 附件:这是来自: 最简单的方法可能是使用以下内容: private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0,
最简单的方法可能是使用以下内容:
private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0,
DateTimeKind.Utc);
...
public static DateTime UnixTimeToDateTime(string text)
{
double seconds = double.Parse(text, CultureInfo.InvariantCulture);
return Epoch.AddSeconds(seconds);
}
有三件事需要注意:
- 如果字符串的格式肯定是“x.y”而不是“x,y”,则应使用如上所示的不变区域性,以确保将“.”解析为小数点
- 您应该在
构造函数中指定UTC,以确保它不认为这是本地时间DateTime
- 如果使用.NET 3.5或更高,您可能需要考虑使用而不是<代码>日期时间< /> > 。
我创建这个迷你图书馆是为了让我的生活(我也希望你的生活)更轻松。这是一个方便的扩展方法
public static DateTime UnixTime(this string timestamp)
{
var dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
return dateTime.AddSeconds(int.Parse(timestamp));
}
我意识到这是一个相当老的问题,但我想我应该发布我的解决方案,使用即时类
我完全明白,也许对一些人来说,在Nodatime拉车可能会很沉重。对于依赖性膨胀不是主要问题的项目,我宁愿依赖维护的库解决方案,而不必维护自己的解决方案。自.NET 4.6以来,您可以使用
DateTimeOffset.fromUnixtimesons()
和DateTimeOffset.fromUnixtimemescles()
:
long unixTime=160000000;
DateTimeOffset dto=DateTimeOffset.FromUnixTimeSeconds(unixTime);
DateTime dt=dto.DateTime;
我相信,这将以一种未指定的日期时间结束。它还将使用本地文化来确定小数点格式。您的文章的编辑版本可以。但是,第一个版本实际上没有什么帮助,因为链接的MSDN页面没有UNIX时间戳的示例,DateTime也没有通过该页面可以找到的内置函数。现在您已经编辑了答案,它与其他答案一样。
var date = (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc))
.AddSeconds(
double.Parse(yourString, CultureInfo.InvariantCulture));
private string conv_Timestamp2Date (int Timestamp)
{
// calculate from Unix epoch
System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
// add seconds to timestamp
dateTime = dateTime.AddSeconds(Timestamp);
string Date = dateTime.ToShortDateString() +", "+ dateTime.ToShortTimeString();
return Date;
}
private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0,
DateTimeKind.Utc);
...
public static DateTime UnixTimeToDateTime(string text)
{
double seconds = double.Parse(text, CultureInfo.InvariantCulture);
return Epoch.AddSeconds(seconds);
}
public static DateTime UnixTime(this string timestamp)
{
var dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0);
return dateTime.AddSeconds(int.Parse(timestamp));
}
Instant.FromSecondsSinceUnixEpoch(longSecondsSinceEpoch).ToDateTimeUtc();