在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
如果你只是想设置/获取以毫秒为单位的时间,你可以使用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。
所以,简而言之:
- 在setMs()函数中,将传递的参数(从1/1/0001开始的刻度)转换为自1/1/1601开始的刻度(基本上,减去1600年的刻度)
- 从该值构造FILETIME结构体
- 调用FileTimeToSystemTime()获取对应的SYSTEMTIME
- 调用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
对象的更多自定义日期和时间格式选项。