将str2date与包含时间的字符串一起使用

问题描述 投票:0回答:1

我有一个方法,给定一个在内部文本中包含ISO 8601日期的.NET XmlNode,将它转换为X ++ date对象。

if (CLRInterop::isInitialized(childNode))
{
    return str2Date(childNode.innerText(), 321);
}
else return maxDate();

如果提供了一个只包含日期的字符串(例如:2019-03-21),这很有效,但只要在此字符串中提供了一个时间(例如:2019-03-21T00:00:00),它就不会返回任何内容。

对此最简单的解决方法是将所有内容都删除前10个字符,但如果由于某种原因字符串仅包含2个字符,则会再次中断。是否有更强大的方法来处理字符串,包括调用str2date的时间?

axapta x++ dynamics-ax-2012
1个回答
3
投票

我刚用一堆例子写了这份工作。第一行可能是你想要的。您可以将其创建为AX中的新作业,然后在第一行放置断点并逐步执行以查看发生的情况或修改为实验。

看起来你的字符串是标准的ISO格式,我也会以各种方式介绍它。

static void DateTimeJob(Args _args)
{
    // This line looks about what you want
    utcDateTime     utcDateTimeFromString   = DateTimeUtil::anyToDateTime("2019-03-21T00:00:00");

    // ISO standard format. You can just assign it directly without quotes
    utcDateTime     utcDateTimeISOFormat = 2019-03-21T00:00:00;

    // Misc vars for below
    utcDateTime     utcNow;
    System.DateTime systemDateTime;
    date            dateOnly;
    str             systemDateTimeStr;

    // Look at
    // DateTimeUtil::<> // This has all sorts of useful functions
    // str2datetime() // May be useful to you
    try
    {
        // How to go from AX UTC to System.DateTime
        systemDateTime      = Global::utcDateTime2SystemDateTime(DateTimeUtil::utcNow());

        // How to go from System.DateTime to AX UTC
        utcNow              = Global::clrSystemDateTime2UtcDateTime(System.DateTime::get_UtcNow());

        // How to get ONLY the date portion from a UTC
        dateOnly            = DateTimeUtil::date(utcNow);

        // Cast to string for output
        systemDateTimeStr   = systemDateTime.ToString();

        // Output a few examples
        info(strFmt("%1, %2, %3",
                    systemDateTimeStr,
                    utcNow,
                    dateOnly));
    }
    catch (Exception::CLRError)
    {
        error(AifUtil::getClrErrorMessage());
    }    
}
© www.soinside.com 2019 - 2024. All rights reserved.