在Java / c#中设置/获取系统时间

本文关键字:获取 系统 设置 时间 Java | 更新日期: 2023-09-27 18:05:43

我在java中有这个关于SystemTime的代码:

  private static  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH.mm.ss");
 //Gets the time of the boardtime object in milliseconds 
  public long getMs() {
          return super.getTimeInMillis();
  }
 //Sets the time of the boardtime object in milliseconds
  public void setMs(long ms) {
      super.setTimeInMillis(ms);
  }

我试着把它转换成c#:对于第一部分,我使用了DateTimeFormatInfo类:

private static DateTimeFormatInfo sdf = new DateTimeFormatInfo();
对于以毫秒为单位的系统时间,我使用TimeSpan:
 long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;

我不知道我所做的直到现在是否正确,但我找不到任何c#等效的setTime。

这是我到现在为止所做的:

  private static DateTimeFormatInfo sdf = new DateTimeFormatInfo();
   public long getMs(){
     long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
       return milliseconds;
   }
   public void setMs(long ms){  
   }

Thanks in advance

在Java / c#中设置/获取系统时间

如果你只是想设置/获取以毫秒为单位的时间,你可以使用c# TimeSpan:

private TimeSpan time
public void setMs(long ms)
{
    this.time = TimeSpan.FromMilliseconds(ms);
}
public long getMs()
{
    return this.time.TotalMilliseconds;
}

上面定义的getMs()返回自1/1/0001以来的MS数(见这里)。基于这个MSDN页面,要从c#设置系统时间,你需要构造一个SYSTEMTIME结构体,正确初始化它,并将它传递给SetSystemTime()函数。该页面有一个简单的示例来说明如何做到这一点。我们如何构造正确的SYSTEMTIME结构?可以使用函数FileTimeToSystemTime(),它获取自1/1/1601(注意年份不同)以来的刻度数,并将其转换为SYSTEMTIME。

所以,简而言之:

  1. 在setMs()函数中,将传递的参数(从1/1/0001开始的刻度)转换为自1/1/1601开始的刻度(基本上,减去1600年的刻度)
  2. 从该值构造FILETIME结构体
  3. 调用FileTimeToSystemTime()获取对应的SYSTEMTIME
  4. 调用SetSystemTime()并传递该值
如果有更简单的方法,我很想知道。希望这对你有帮助!

如果您想以毫秒为单位计算时间,那么使用TimeSpan。TotalMilliseconds方法,使用TimeSpan.FromTicks从DateTime对象构造。创建DateTime对象并使用毫秒操作时间戳,然后使用预定义的DateTime。AddMilliseconds方法。减去毫秒:

var now = DateTime.Now; // or new DateTime(2014, 05, 29, 21, 27, 05); 
Console.WriteLine(now.ToString("yyyy-MM-dd HH.mm.ss"));
var future = now.AddMilliseconds(1234567);
var past = now.AddMilliseconds(-1234567);
Console.WriteLine(future.ToString("yyyy-MM-dd HH.mm.ss"));
Console.WriteLine(past.ToString("yyyy-MM-dd HH.mm.ss"));
// get milliseconds from current date time object using TimeSpan.TotalMilliseconds
var ts = TimeSpan.FromTicks(now.Ticks);
Console.WriteLine(ts.TotalMilliseconds);

输出为:

2014-05-29 21.27.05
2014-05-29 21.47.40
2014-05-29 21.06.31
63536995625703,1

请查看MSDN关于自定义日期和时间格式字符串的文章,了解DateTime对象的更多自定义日期和时间格式选项。