Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取显示自1970年以来的整数秒数的字符串?_C# - Fatal编程技术网

C# 如何获取显示自1970年以来的整数秒数的字符串?

C# 如何获取显示自1970年以来的整数秒数的字符串?,c#,C#,以下是我迄今为止所做的尝试: var value = DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds.ToString() 它给了我下面的答案,但我想得到一个整数: 1500092088.9501下面是一些处理此类场景的各种方法的示例 double secondsSince1970 = DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;

以下是我迄今为止所做的尝试:

var value = DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds.ToString()
它给了我下面的答案,但我想得到一个整数:


1500092088.9501

下面是一些处理此类场景的各种方法的示例

double secondsSince1970 = DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;

// int logic. ints are whole numbers so casting to an int will drop all decimals with no rounding.
Console.WriteLine(((long)secondsSince1970).ToString());

// Math logic. .Net gives us some handy Maths to work with rounding decimals
// Round up
Console.WriteLine(Math.Ceiling(secondsSince1970).ToString());
// Round down
Console.WriteLine(Math.Floor(secondsSince1970).ToString());
// Round nearest
Console.WriteLine(Math.Round(secondsSince1970).ToString());

编辑:将int逻辑转换为long而不是int,因为int.MaxValue将在2038年初达到。下面是一些处理这种情况的各种方法的示例

double secondsSince1970 = DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;

// int logic. ints are whole numbers so casting to an int will drop all decimals with no rounding.
Console.WriteLine(((long)secondsSince1970).ToString());

// Math logic. .Net gives us some handy Maths to work with rounding decimals
// Round up
Console.WriteLine(Math.Ceiling(secondsSince1970).ToString());
// Round down
Console.WriteLine(Math.Floor(secondsSince1970).ToString());
// Round nearest
Console.WriteLine(Math.Round(secondsSince1970).ToString());
编辑:将int逻辑更改为强制转换为long而不是int,因为int.MaxValue将在2038年开始时达到

long secsSinceEpoch = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
这似乎是您正在寻找的,当然,如果您希望将其作为实际字符串,您可能需要调用ToString:

var secsSinceEpoch = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString();
我只需要使用DateTimeOffset获得秒数:

long secsSinceEpoch = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
这似乎是您正在寻找的,当然,如果您希望将其作为实际字符串,您可能需要调用ToString:

var secsSinceEpoch = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString();

我认为值得一提的是,如果你想知道从大纪元开始的秒数,也就是1/1/1970,你不需要做减法。。。您只需要获取当前日期时间并将其转换为秒

Joe_DM为您的取整问题提供了一个很好的答案


请留下评论,但在rep上仍然有点短:

我认为值得一提-如果您想要从大纪元时间开始算起的秒数,也就是1/1/1970,您不需要做减法。。。您只需要获取当前日期时间并将其转换为秒

Joe_DM为您的取整问题提供了一个很好的答案


将作为评论离开,但仍然有一点短的代表:

所以。。。你在寻找如何操作的说明?这段代码的输出是什么?@danyolgiax这不是重复的。您链接的问题显示了如何获得总秒差,Ops问题已经获得了差和所需的舍入。所以。。。你在寻找如何操作的说明?这段代码的输出是什么?@danyolgiax这不是重复的。您链接的问题显示了如何获得总秒差,Ops问题已经获得了差和所需的舍入。这会在小数点后给出数字吗?我想得到一个整数。不,因为它是长的,不是双精度的。整数没有小数点,它是一个整数。你的方法让我很感兴趣,所以我做了一个快速的基准测试,虽然这是一种可能不需要优化的操作,但出于兴趣,我还是想分享结果。强制转换datetime总秒数将在大约588毫秒内运行10000000个循环,而DateTimeOffset ToUnixTimeSeconds将在2111毫秒内运行10000000个循环。所以大约是4倍slower@AlanToUnixTimeSeconds方法在DateTimeOffset类型上可用,但它不会直接存在于DateTimeOffset类型上。DateTimeOffset也会在小数点后给出数字吗?我想得到一个整数。不,因为它是长的,不是双精度的。整数没有小数点,它是一个整数。你的方法让我很感兴趣,所以我做了一个快速的基准测试,虽然这是一种可能不需要优化的操作,但出于兴趣,我还是想分享结果。强制转换datetime总秒数将在大约588毫秒内运行10000000个循环,而DateTimeOffset ToUnixTimeSeconds将在2111毫秒内运行10000000个循环。所以大约是4倍slower@AlanToUnixTimeSeconds方法在DateTimeOffset类型上可用,它不会直接存在于DateTime上