WeekOfYear в X ++ с использованием .net lib - PullRequest
2 голосов
/ 29 марта 2011
 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. Я нашел другое решение для этого, я создал файл dll в VS .net и добавил его в узел ссылки (AOT) AX. Сократил код в AX static void Job5(Args _args) { weekofyear.wof asd; ; asd = new weekofyear.Wof(); print asd.weekofyr(today()); pause; }

Ответы [ 3 ]

4 голосов
/ 29 марта 2011

попробуйте

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));
2 голосов
/ 29 марта 2011

[Примечание для будущих читателей: ниже описана ошибка в исходном коде, опубликованном Индранилом; это не относится к коду, находящемуся в данный момент в вопросе, потому что Индранил исправил эту ошибку. Ошибка other была рассмотрена в другом ответе от кого-то еще: -).]

Вы не должны передавать строку в качестве первого аргумента GetWeekOfYear; он хочет System.DateTime (http://msdn.microsoft.com/en-us/library/system.globalization.calendar.getweekofyear.aspx). (по крайней мере, это так в обычном .NET; я не знаю, делает ли Dynamics AX какую-то другую магическую вещь. Я сомневаюсь, что это так.)

(Но если и когда вам нужна дата в виде строки, эти обратные косые черты \ должны быть косыми чертами /.)

1 голос
/ 29 марта 2011

Просто убедитесь, что вы загружаете правильную CultureInfo, если вы ожидаете, что этот код будет поддерживать местоположения по всему миру. Загрузка текущей CultureInfo загрузит серверы предпочитаемой культуры. Если пользователь en-gb, а сервер - en-us, ваш первый день недели будет неправильным.

Чтобы загрузить определенную информацию о культуре, вы можете просто сделать это:

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

В примере, выбранном в качестве ответа, код загружает cultureinfo, но cultureinfo не используется в качестве параметра для метода GetWeekOfYear, что на самом деле не имеет никакого смысла. Вместо этого вы можете отправить в настройках из cultureinfo.

...