У меня следующая ситуация. У меня есть код C ++
1) SystemTimeToFileTime(&st, &m_Time)
Прежде чем позвонить st
собирается путем разбора значения из строки и присваивания его членам вручную (см. параграф об этом ниже) — но ему назначены только год, месяц, день, час, минуты и секунды.
m_Time
переменная экземпляра типа FILETIME.
Этот метод вызывается в функции с именем ToDate
(Вот ссылка на эту функцию для заинтересованных: http://codepad.org/POoiKHMw, Я задокументировал каждую строку этого).
В основном в конце этого метода SystemTimeToFileTime
вызывается с собравшимися st
Передавая структуру, я подумал, что смогу легко воспроизвести эту часть ручного анализа в C #. Вот почему я спросил только об одной функции — SystemTimeToFileTime
,
После этого есть такая функция:
2) dppDatetime_t RsDateTime::GetAsPrepaidTime() const
{
dppDatetime_t dt;// Just a custom structure, this is no problem to create in C#
SYSTEMTIME st = GetLocalTimeAsSystem();
dt.Year = st.wYear;
dt.Month = st.wMonth;
dt.Day = st.wDay;
dt.Hour = st.wHour;
dt.Minute = st.wMinute;
dt.Second = st.wSecond;
return dt;
}
GetLocalTimeAsSystem
определяется как:
3) SYSTEMTIME RsDateTime::GetLocalTimeAsSystem() const
{
SYSTEMTIME st;
::FileTimeToSystemTime(&m_Time, &st);
return st;
}
Мне в основном нужно копировать функциональность, о которой я говорил выше: 1), 2), 3) точки в C #. Я был бы очень признателен за помощь в этом? Как добиться того же результата в C #?
Пользователь сначала звонит 1), затем 2) (но 2) звонит 3) изнутри).
Не могу ли я реализовать то, что сделано выше, используя только структуру DateTime в C #?
Я не спрашиваю, как выполнить ручной анализ в функции ToDate, я тоже могу это сделать сам.
РЕДАКТИРОВАТЬ: После комментариев, вот пример некоторых ввода / вывода:
Это вход, который можно получить в пункте 1), эта строка будет проанализирована и st
Структура собрана:
151010070707
Вывод, что пишется dppDatetime_t
:
year:2015
month:10
day:10
hour:7
min:7
sec:7
PS Это строки формата, которые я видел в коде C ++, с которым вызывается функция ToDate:
//YYMMDDhhmmss - e.g. "151030123030"//DD.MM.YY
//DD.MM.YYYY - 01.01.2005
//DDMMYYYY
Я думаю, что есть ошибки в вашей спецификации.
Однако, если вы хотите разобрать строку как "151030123030"
в DateTime
где строка в формате "yyMMddHHmmss"
, вы можете сделать это так:
string input = "151030123030";
var date = DateTime.ParseExact(input, "yyMMddHHmmss", CultureInfo.InvariantCulture);
Console.WriteLine(date); // Prints "30/10/2015 12:30:30"
Других решений пока нет …