简体   繁体   English

VB6 GMTOffset到C#

[英]VB6 GMTOffset to C#

I am trying to convert the code below from VB6 to C#. 我试图将下面的代码从VB6转换为C#。 I am just not sure where to begin, I guess maybe because I am sucked way to much into VB6 and can't seem to take a step back. 我只是不确定从哪里开始,我想也许是因为我对VB6的吸引力很大,似乎无法退后一步。

Private Function GMT_OFFSET() As Integer
    '****DECLARE VARIABLES
    Dim dtNow As Date, dtEngland As Date
    Dim dtGMT As SYSTEMTIME
    '****GET SYSTEM TIME INFORMATION
    Call GetSystemTime(dtGMT)
    dtNow = Now
    dtEngland = dtGMT.wYear & "-" & dtGMT.wMonth & "-" & dtGMT.wDay & " " & dtGMT.wHour & ":" & dtGMT.wMinute & ":" & dtGMT.wSecond
    '****RETURN QUARTER HOURS
    GMT_OFFSET = DateDiff("n", dtEngland, dtNow) \ 15
End Function

I know GetSystemTime is a Win32 API, obviously don't want to do PInvoke in .NET but rather use the pure objects in the .NET Framework. 我知道GetSystemTime是一个Win32 API,显然不想在.NET中使用PInvoke,而是使用.NET Framework中的纯对象。

Based on your code, you are looking for something along the lines of: 根据您的代码,您正在寻找以下内容:

        var dtNow = DateTime.Now;
        var dtOffset = (dtNow.ToUniversalTime().Subtract(dtNow)).TotalMinutes / 15;

You may need to adjust the offset negatively if the universal time is greater than the current system time. 如果通用时间大于当前系统时间,则可能需要负偏移调整偏移。

The system time: 系统时间:

DateTime systemDateTime = DateTime.Now;

But more importantly, the offset the system is running with: 但更重要的是,系统运行的偏移量:

TimeZoneInfo systemTimeZone = TimeZoneInfo.Local;
TimeSpan offset = systemTimeZone.GetUtcOffset();
Int32 offsetMinutes = offset.Hours * 60 + offset.Minutes;

Near direct translation: 近直接翻译:

//Private Function GMT_OFFSET() As Integer
int GMT_OFFSET()
{
  //'****DECLARE VARIABLES
  //Dim dtNow As Date, dtEngland As Date
  DateTime dtNow, dtEngland;
  //Dim dtGMT As SYSTEMTIME
  //'****GET SYSTEM TIME INFORMATION
  //Call GetSystemTime(dtGMT)
  //dtNow = Now
  //dtEngland = dtGMT.wYear & "-" & dtGMT.wMonth & "-" & dtGMT.wDay & " " & dtGMT.wHour & ":" & dtGMT.wMinute & ":" & dtGMT.wSecond
  dtEngland = DateTime.UtcNow;
  dtNow = dtEngland.ToLocalTime;
  //'****RETURN QUARTER HOURS
  //GMT_OFFSET = DateDiff("n", dtEngland, dtNow) \ 15
  return Convert.ToInt32((dtNow - dtEngland).TotalMinutes) / 15;
//End Function
}

NB VB6's DateDiff(interval,date1,date2) results in intervals based upon date2 - date1 , not vice versa. NB VB6的DateDiff(interval,date1,date2)导致的时间间隔基于date2 - date1 ,而不是相反。

But the one-liner is: 但单线是:

return Convert.ToInt32(TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow).TotalMinutes) / 15;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM