А вы знали, что разные страны имеют разные форматы дат? Когда вы делаете многоязычный отчёт, или же отчёт для страны, где говорят на персидском (фарси) - важно указывать даты в правильном формате. По умолчанию FastReport использует европейский формат дат, но средства .NET позволяют конвертировать его в другие форматы.
Итак, у нас есть задача конвертировать дату в персидский формат. К примеру, у нас в отчёте есть выражение [Date], выводящее сегодняшнюю дату:
Выражение [Date] получает текущую системную дату в формате DateTime, но значение текстового отчёта после всех обработок - строковое, т.е String. Создадим новую функцию в скрипте отчёта:
private void ConvertToPersianDate(object sender, EventArgs e)
Мы будем вызывать эту функцию из текстовых объектов. Создадим временную переменную, которая будет конвертировать текст объекта в DateTime:
DateTime d = DateTime.Parse((sender as TextObject).Text);
“sender as TextObject” - обращение к объекту, который вызвал функцию. Мы можем использовать функции и свойства объекта, если обращаемся к нему таким образом.
После этого нам понадобится объект PersianCalendar, который будет конвертировать нашу дату в персидский формат:
PersianCalendar pc = new PersianCalendar();
Заметьте, что этот объект содержится в библиотеке System.Globalization, и её нужно указать в секции using.
После этого нам необходимо изменить сам текст объекта. Рассмотрим эту строку поподробнее:
(sender as TextObject).Text = string.Format("{0}/{1}/{2}", pc.GetYear(d), pc.GetMonth(d), pc.GetDayOfMonth(d));
Здесь мы задаём текст нашего объекта. Само значение будет в формате год/месяц/день, так как мы используем функции PersianCalendar, получающие соответствующие значения. Участок кода, где задаётся текст, можно редактировать по желанию. Например, так выглядит код для даты в формате день.месяц.год:
"{0}.{1}.{2}", pc.GetDayOfMonth(d), pc.GetMonth(d), pc.GetYear(d)
Итак, в итоге у нас получилась такая функция:
using System.Globalization; namespace FastReport { public class ReportScript { private void ConvertToPersianDate(object sender, EventArgs e) { // Конвертация в формат DateTime DateTime d = DateTime.Parse((sender as TextObject).Text); // Создание объекта для конвертации PersianCalendar pc = new PersianCalendar(); // Создание строки, используя PersianCalendar // Возможно изменить шаблон строки (sender as TextObject).Text = string.Format("{0}/{1}/{2}", pc.GetYear(d), pc.GetMonth(d), pc.GetDayOfMonth(d)); } } }
Добавим функцию к событию AfterData необходимого объекта.
И теперь дата выглядит таким образом:
Для того, чтобы использовать другие функции, связанные со временем, вы можете консультироваться со следующей таблицей:
GetDayOfWeek(), | День недели |
GetMonth(), | Месяц |
GetDayOfMonth(), | День месяца |
GetYear(), | Год |
GetHour() | Час |
GetMinute() | Минута |
GetSecond() | Секунда |
Теперь вы знаете как менять вид даты в своём отчёте. Эта статья может помочь в изменении под вид (год, месяц, день). Он используется в Японии, Китае, Северной Корее, Южной Корее, на Тайване, в Венгрии, Литве и Иране, а также он считается второстепенным в некоторых странах Европы и Азии.