WeekOfYear在X ++中使用.net lib

时间:2011-03-29 09:20:21

标签: x++ dynamics-ax-2009

 static void Job5(Args _args)
    {
     int i;
     System.DateTime netDttm;
     System.Int32 intnet;
    ;
     netDttm = new System.DateTime(2011,03,20 ,13,44,55);
     intnet = System.Globalization.CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(netDttm, Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Sunday);

     i = intnet;

     info(int2str(i));
   }

我在vb.net中尝试过它工作正常但在x ++中使用相同(使用.net lib)它显示语法错误。我正在尝试的是让周没有。从提供的日期。任何见解都将不胜感激。

P.S。我找到了另一种解决方案,即我在VS .net中创建了一个dll文件,并将其添加到AX的Reference节点(AOT)。它缩短了AX中的代码    static void Job5(Args _args) { weekofyear.wof asd; ; asd = new weekofyear.Wof(); print asd.weekofyr(today()); pause; }

3 个答案:

答案 0 :(得分:4)

试试这个

int i;
     System.DateTime netDttm;
     System.Int32 intnet;
     System.Globalization.CultureInfo cultureInfo;
     System.Globalization.Calendar    calendar;
     System.Globalization.CalendarWeekRule calWeekRule
    ;
     netDttm = new System.DateTime(2011,03,20 ,13,44,55);
     cultureInfo = System.Globalization.CultureInfo::get_CurrentCulture();
     calendar  = cultureInfo.get_Calendar();
     intnet = calendar.GetWeekOfYear(netDttm, System.Globalization.CalendarWeekRule::FirstFourDayWeek, System.DayOfWeek::Sunday);

     i = intnet;

 info(int2str(i));

答案 1 :(得分:2)

[未来读者的注意事项:以下描述了原始代码Indranil发布的错误;它不适用于当前问题中的代码,因为Indranil修复了这个错误。 其他错误在其他人的回答中处理: - )。]

您不应该将字符串作为第一个参数传递给GetWeekOfYear;它想要一个System.DateTime(http://msdn.microsoft.com/en-us/library/system.globalization.calendar.getweekofyear.aspx)。 (至少,在普通的.NET中是这样的;我不知道Dynamics AX是否会做其他一些神奇的事情。我对此表示怀疑。)

(但是如果你想要一个字符串形式的日期,那些反斜杠\应该是正斜杠/。)

答案 2 :(得分:1)

如果您希望此代码支持字宽的位置,请确保加载正确的CultureInfo。加载当前的CultureInfo将加载服务器首选文化。如果用户是en-gb且服务器是en-us,那么您的第一天就会出错。

要加载特定的cultureinfo,您只需执行以下操作:

System.Globalization.CultureInfo arCul = new System.Globalization.CultureInfo("en-US");

在选择作为答案的示例中,代码加载了cultureinfo,但cultureinfo不用作GetWeekOfYear方法的参数,这实际上没有任何意义。相反,您可以从cultureinfo发送设置。