你如何在VB.Net中以毫秒(长)获得当前时间?

Gno*_*upi 12 vb.net time

System.currentTimeMilli()在VB.NET中寻找相当于Java的东西.

打电话的方法是什么?我知道Datetime.Now,但不知道实际转换为长毫秒.


有关我的具体需求的更多细节:

我需要管理登录过期.所以最有可能在我登录时,我会设置一个"expiration_time_milli",等于当前时间+超时值.然后,如果我想检查我的登录是否有效,我会检查"expiration_time_milli"是否仍然优于当前时间.

Guf*_*ffa 12

获取当前时间和时间原点之间的差异,使用TotalMilliseconds属性获取时间跨度为毫秒,并将其转换为long.

DirectCast((Datetime.Now - New DateTime(1970, 1, 1)).TotalMilliseconds, Int64)
Run Code Online (Sandbox Code Playgroud)

  • 如果代码将被频繁调用,我可能会创建一个静态(在VB中为`Shared`)变量来保存`New DateTime(1970,1,1)`值,因为它是静态的.无需为每个调用重新创建对象. (3认同)
  • 或者CLng((Datetime.Now - New DateTime(1970,1,1)).TotalMilliseconds) (2认同)

Jon*_*eet 7

看到这里所有涉及 的答案有点令人震惊DateTime.Now,它返回本地时间(如“在系统默认时区”中) - 而System.currentTimeMillis()返回自 Unix 纪元(1970-01-01T00:00:00Z)以来的毫秒数)。这里的所有答案可能应该参考DateTime.UtcNow

幸运的是,在提出这个问题之后,通过 提供了一种更简单的方法DateTimeOffset.ToUnixTimeMilliseconds()。所以你只需要:

Dim millis = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
Run Code Online (Sandbox Code Playgroud)


小智 5

你可以用

(DateTime.Now-new DateTime(1970,1,1)).TotalMilliseconds
Run Code Online (Sandbox Code Playgroud)

顺便说一句,只是猜测一下你可能对你有用的东西

DateTime.UtcNow
Run Code Online (Sandbox Code Playgroud)