C# 如何用C语言获取unix时间戳#

C# 如何用C语言获取unix时间戳#,c#,timestamp,unix-timestamp,C#,Timestamp,Unix Timestamp,我已经环顾了stackoverflow,甚至看了一些建议的问题,似乎都没有人回答,“如何获得C#中的unix时间戳?”通过使用并减去1970-01-01的历元时间,可以获得C#中的unix时间戳 e、 g DateTime.UtcNow可以替换为要获取unix时间戳的任何DateTime对象 还有一个字段,DateTime.UnixEpoch,由MSFT提供,但它可以替代new DateTime(1970,1,1)通过使用并减去1970-01-01的历元时间,您可以得到一个C语言的unix时间戳

我已经环顾了stackoverflow,甚至看了一些建议的问题,似乎都没有人回答,“如何获得C#中的unix时间戳?”

通过使用并减去1970-01-01的历元时间,可以获得C#中的unix时间戳

e、 g

DateTime.UtcNow
可以替换为要获取unix时间戳的任何
DateTime
对象


还有一个字段,
DateTime.UnixEpoch
,由MSFT提供,但它可以替代
new DateTime(1970,1,1)
通过使用并减去1970-01-01的历元时间,您可以得到一个C语言的unix时间戳

e、 g

DateTime.UtcNow
可以替换为要获取unix时间戳的任何
DateTime
对象

还有一个字段,
DateTime.UnixEpoch
,它是由MSFT提供的,但可能是新DateTime(1970,1,1)的替代品。这就是我使用的

 public class TimeStamp
    {
        public Int32 UnixTimeStampUTC()
        {
            Int32 unixTimeStamp;
            DateTime currentTime = DateTime.Now;
            DateTime zuluTime = currentTime.ToUniversalTime();
            DateTime unixEpoch = new DateTime(1970, 1, 1);
            unixTimeStamp = (Int32)(zuluTime.Subtract(unixEpoch)).TotalSeconds;
            return unixTimeStamp;
        }
}
这是我用的

 public class TimeStamp
    {
        public Int32 UnixTimeStampUTC()
        {
            Int32 unixTimeStamp;
            DateTime currentTime = DateTime.Now;
            DateTime zuluTime = currentTime.ToUniversalTime();
            DateTime unixEpoch = new DateTime(1970, 1, 1);
            unixTimeStamp = (Int32)(zuluTime.Subtract(unixEpoch)).TotalSeconds;
            return unixTimeStamp;
        }
}
这就是我使用的:

public long UnixTimeNow()
{
    var timeSpan = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0));
    return (long)timeSpan.TotalSeconds;
}
请记住,此方法将以协调统一时间(UTC)的形式返回时间。

我使用的是:

public long UnixTimeNow()
{
    var timeSpan = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0));
    return (long)timeSpan.TotalSeconds;
}

请记住,此方法将以协调统一时间(UTC)的形式返回时间。

截断
。TotalSeconds
非常重要,因为它被定义为
当前系统的值。TimeSpan结构以整分数秒表示。

那么
DateTime
的扩展名呢?第二个可能更令人困惑的是,在属性扩展存在之前,它是值得的

/// <summary>
/// Converts a given DateTime into a Unix timestamp
/// </summary>
/// <param name="value">Any DateTime</param>
/// <returns>The given DateTime in Unix timestamp format</returns>
public static int ToUnixTimestamp(this DateTime value)
{
    return (int)Math.Truncate((value.ToUniversalTime().Subtract(new DateTime(1970, 1, 1))).TotalSeconds);
}

/// <summary>
/// Gets a Unix timestamp representing the current moment
/// </summary>
/// <param name="ignored">Parameter ignored</param>
/// <returns>Now expressed as a Unix timestamp</returns>
public static int UnixTimestamp(this DateTime ignored)
{
    return (int)Math.Truncate((DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds);
}
//
///将给定的日期时间转换为Unix时间戳
/// 
///任何时间
///Unix时间戳格式的给定日期时间
公共静态时间戳(此日期时间值)
{
return(int)Math.Truncate((value.ToUniversalTime().Subtract(newdatetime(1970,1,1))).TotalSeconds);
}
/// 
///获取表示当前时刻的Unix时间戳
/// 
///忽略参数
///现在表示为Unix时间戳
公共静态int unixtimestap(忽略此日期时间)
{
return(int)Math.Truncate((DateTime.UtcNow.Subtract(newdatetime(1970,1,1))).TotalSeconds);
}

截断
。TotalSeconds
非常重要,因为它被定义为
当前System.TimeSpan结构的值,以整分数秒表示。

那么
DateTime
的扩展名呢?第二个可能更令人困惑的是,在属性扩展存在之前,它是值得的

/// <summary>
/// Converts a given DateTime into a Unix timestamp
/// </summary>
/// <param name="value">Any DateTime</param>
/// <returns>The given DateTime in Unix timestamp format</returns>
public static int ToUnixTimestamp(this DateTime value)
{
    return (int)Math.Truncate((value.ToUniversalTime().Subtract(new DateTime(1970, 1, 1))).TotalSeconds);
}

/// <summary>
/// Gets a Unix timestamp representing the current moment
/// </summary>
/// <param name="ignored">Parameter ignored</param>
/// <returns>Now expressed as a Unix timestamp</returns>
public static int UnixTimestamp(this DateTime ignored)
{
    return (int)Math.Truncate((DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds);
}
//
///将给定的日期时间转换为Unix时间戳
/// 
///任何时间
///Unix时间戳格式的给定日期时间
公共静态时间戳(此日期时间值)
{
return(int)Math.Truncate((value.ToUniversalTime().Subtract(newdatetime(1970,1,1))).TotalSeconds);
}
/// 
///获取表示当前时刻的Unix时间戳
/// 
///忽略参数
///现在表示为Unix时间戳
公共静态int unixtimestap(忽略此日期时间)
{
return(int)Math.Truncate((DateTime.UtcNow.Subtract(newdatetime(1970,1,1))).TotalSeconds);
}

您也可以使用记号。我正在为Windows Mobile编写代码,因此没有完整的方法集。我没空

long epochTicks = new DateTime(1970, 1, 1).Ticks;
long unixTime = ((DateTime.UtcNow.Ticks - epochTicks) / TimeSpan.TicksPerSecond);


你也可以用记号。我正在为Windows Mobile编写代码,因此没有完整的方法集。我没空

long epochTicks = new DateTime(1970, 1, 1).Ticks;
long unixTime = ((DateTime.UtcNow.Ticks - epochTicks) / TimeSpan.TicksPerSecond);


从当前时间中减去1970时,请注意timespan通常具有非零毫秒字段。如果出于某种原因您对毫秒感兴趣,请记住这一点

以下是我为解决这个问题所做的

 DateTime now = UtcNow();

 // milliseconds Not included.
 DateTime nowToTheSecond = new DateTime(now.Year,now.Month,now.Day,now.Hour,now.Minute,now.Second); 

 TimeSpan span = (date - new DateTime(1970, 1, 1, 0, 0, 0, 0));

 Assert.That(span.Milliseconds, Is.EqualTo(0)); // passes.

从当前时间中减去1970时,请注意timespan通常具有非零毫秒字段。如果出于某种原因您对毫秒感兴趣,请记住这一点

以下是我为解决这个问题所做的

 DateTime now = UtcNow();

 // milliseconds Not included.
 DateTime nowToTheSecond = new DateTime(now.Year,now.Month,now.Day,now.Hour,now.Minute,now.Second); 

 TimeSpan span = (date - new DateTime(1970, 1, 1, 0, 0, 0, 0));

 Assert.That(span.Milliseconds, Is.EqualTo(0)); // passes.
从.NET4.6开始,有


这是一个实例方法,因此您需要在的实例上调用它
DateTimeOffset
。不过,您也可以强制转换任何
DateTime
实例。要获取当前时间戳,请执行以下操作:

DateTimeOffset.Now.ToUnixTimeSeconds()
要从日期时间获取时间戳,请执行以下操作:

DateTime foo = DateTime.Now;
long unixTime = ((DateTimeOffset)foo).ToUnixTimeSeconds();
从.NET4.6开始,有


这是一个实例方法,因此您需要在的实例上调用它
DateTimeOffset
。不过,您也可以强制转换任何
DateTime
实例。要获取当前时间戳,请执行以下操作:

DateTimeOffset.Now.ToUnixTimeSeconds()
要从日期时间获取时间戳,请执行以下操作:

DateTime foo = DateTime.Now;
long unixTime = ((DateTimeOffset)foo).ToUnixTimeSeconds();

这个解决方案在我的情况下很有帮助:

   public class DateHelper {
     public static double DateTimeToUnixTimestamp(DateTime dateTime)
              {
                    return (TimeZoneInfo.ConvertTimeToUtc(dateTime) -
                             new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc)).TotalSeconds;
              }
    }
在代码中使用帮助器:

double ret = DateHelper.DateTimeToUnixTimestamp(DateTime.Now)

这个解决方案在我的情况下很有帮助:

   public class DateHelper {
     public static double DateTimeToUnixTimestamp(DateTime dateTime)
              {
                    return (TimeZoneInfo.ConvertTimeToUtc(dateTime) -
                             new DateTime(1970, 1, 1, 0, 0, 0, 0, System.DateTimeKind.Utc)).TotalSeconds;
              }
    }
在代码中使用帮助器:

double ret = DateHelper.DateTimeToUnixTimestamp(DateTime.Now)

我已将此实用方法的最优雅方法拼接在一起:

public static class Ux {
    public static decimal ToUnixTimestampSecs(this DateTime date) => ToUnixTimestampTicks(date) / (decimal) TimeSpan.TicksPerSecond;
    public static long ToUnixTimestampTicks(this DateTime date) => date.ToUniversalTime().Ticks - UnixEpochTicks;
    private static readonly long UnixEpochTicks = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;
}

我已将此实用方法的最优雅方法拼接在一起:

public static class Ux {
    public static decimal ToUnixTimestampSecs(this DateTime date) => ToUnixTimestampTicks(date) / (decimal) TimeSpan.TicksPerSecond;
    public static long ToUnixTimestampTicks(this DateTime date) => date.ToUniversalTime().Ticks - UnixEpochTicks;
    private static readonly long UnixEpochTicks = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;
}

我正在使用的简单代码:

公共静态长CurrentTimestamp()
{
return(long)(DateTime.UtcNow.Subtract(newdatetime(1970,1,1)).TotalSeconds*1000);
}

这段代码给出了unix时间戳,从1970-01-01到现在的总毫秒数。

我正在使用的简单代码:

公共静态长CurrentTimestamp()
{
return(long)(DateTime.UtcNow.Subtract(newdatetime(1970,1,1)).TotalSeconds*1000);
}

这段代码给出了unix时间戳,即从1970-01-01到现在的总毫秒数。

系统中的DateTimeOffset有一个tounixTimeMillimes

您可以为DateTime编写类似的方法:

public static long ToUnixTimeSeconds(this DateTime value)
{
    return value.Ticks / 10000000L - 62135596800L;
}
10000000升-将刻度转换为秒

62135596800L-将1978年1月1日转换为1978年1月1日


Utc没有问题,系统中的DateTimeOffset有一个TounixTimeMillics

您可以为DateTime编写类似的方法:

public static long ToUnixTimeSeconds(this DateTime value)
{
    return value.Ticks / 10000000L - 62135596800L;
}
10000000升-将刻度转换为秒

62135596800L-将1978年1月1日转换为1978年1月1日


Utc没有问题,下面是双向扩展的t级