Как обновить дату системы и/или время с помощью.NET

Во-первых, ваши типы не правы. a имеет целые числа, а имя не является целым числом.

Что было бы лучше (с использованием STL), так это использовать пару из строки и целого числа (вы можете использовать символ для всего, что имеет значение, если только вы не хотите, чтобы люди были 2 147 483 000 лет). [ 112]

int array_size = 4; // as an example
// the array, but now the type is of a pairing of string and integer.
std::array<std::pair<std::string, int>, array_size> a; 
a[0] = {"joao", 12}; // how to set a name 

Или какие угодно имена.

8
задан Jaans 11 January 2014 в 03:01
поделиться

4 ответа

Часть Вашей проблемы - то, что у Вас есть несколько неправильных подписей PInvoke. Самый известный SetSystemTime должен иметь непустое возвращаемое значение. Вот корректная подпись

    /// Return Type: BOOL->int
    ///lpSystemTime: SYSTEMTIME*
    [System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint="SetSystemTime")]
    [return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
public static extern  bool SetSystemTime([InAttribute()] ref SYSTEMTIME lpSystemTime) ;

Мое подозрение - то, что блокировка возвращаемого значения испортила стек, и функция SetSystemTime по существу закончилась с неправильными данными.

6
ответ дан 5 December 2019 в 10:44
поделиться

Согласно коду Вы имеете тут же, Вы не увеличиваете час. Похоже на установку системного времени на то же самое время, как это было при вызове Win32GetSystemTime.

Попытка:

systime.wHour = (ushort)(sysTime.Hour + 1);
4
ответ дан 5 December 2019 в 10:44
поделиться

Проблема касается UTC времени и местного времени. См. эту ссылку: http://www.codeproject.com/Messages/2998246/problem-with-SetSystemTime-fucntion-of-Kernel32-dl.aspx

Надеюсь, это вам поможет.

1
ответ дан 5 December 2019 в 10:44
поделиться

TimeSpan diffLocalTime = DateTime.Now - DateTime.UtcNow; 
SystemTime systemTime = new SystemTime(); 
systemTime.Second = ... 
systemTime.Minute =.... 
systemTime.Hour -= (ushort)(diffLocalTime.Hours + 1); // 00:59:59 I rounded as 1 hour 
bool result = SetSystemTime(ref systemTime); 

Это использование Работает правильно для местного часового пояса.

2
ответ дан 5 December 2019 в 10:44
поделиться