Персидский календарь в отчёте

19.05.2021

А вы знали, что разные страны имеют разные форматы дат? Когда вы делаете многоязычный отчёт, или же отчёт для страны, где говорят на персидском (фарси) - важно указывать даты в правильном формате. По умолчанию FastReport использует европейский формат дат, но средства .NET позволяют конвертировать его в другие форматы.

Итак, у нас есть задача конвертировать дату в персидский формат. К примеру, у нас в отчёте есть выражение [Date], выводящее сегодняшнюю дату:

[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 необходимого объекта.

AfterData

И теперь дата выглядит таким образом:

Итоговый результат

Для того, чтобы использовать другие функции, связанные со временем, вы можете консультироваться со следующей таблицей:

 GetDayOfWeek(),  День недели
 GetMonth(),  Месяц
 GetDayOfMonth(),  День месяца
 GetYear(),  Год
 GetHour()  Час
 GetMinute()  Минута
 GetSecond()  Секунда

Теперь вы знаете как менять вид даты в своём отчёте. Эта статья может помочь в изменении под вид (год, месяц, день). Он используется в Японии, Китае, Северной Корее, Южной Корее, на Тайване, в Венгрии, Литве и Иране, а также он считается второстепенным в некоторых странах Европы и Азии. 

20 ноября 2024

Локализация и смена языков в FastReport VCL

FastReport VCL поддерживает 40 языков для локализации интерфейса и позволяет изменять язык на лету через меню или код, без перекомпиляции.
1 ноября 2024

Новые возможности редактора отчетов FastReport VCL

Рассматриваем новые возможности редактора отчетов: выносные линии, подсветка пересекающихся объектов, обновлённые деревья отчетов и данных.
30 октября 2024

Использование стилей при создании отчетов в FastReport VCL

В статье подробно рассматривается одна из новых возможностей FastReport VCL – применение стилей и страниц стилей.