C#中的FILETIME操作 - 仅使用DateTime

时间:2015-10-30 08:49:24

标签: c# c++ datetime filetime

我有以下情况。我有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)。

我不能仅使用C#中的DateTime结构实现上面的操作吗?

我不是问如何在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

1 个答案:

答案 0 :(得分:0)

我认为您的规范中存在错误。

但是,如果要将"151030123030"之类的字符串解析为DateTime,其中字符串的格式为"yyMMddHHmmss",则可以这样执行:

string input = "151030123030";

var date = DateTime.ParseExact(input, "yyMMddHHmmss", CultureInfo.InvariantCulture);

Console.WriteLine(date); // Prints "30/10/2015 12:30:30"