Czy wiesz, że różne kraje mają różne formaty daty? Kiedy tworzysz raport wielojęzyczny, lub raport dla kraju, w którym mówi się po persku (Farsi), ważne jest, aby wyświetlić daty w odpowiednim formacie. Domyślnie FastReport używa europejskiego formatu daty, ale narzędzia .NET umożliwiają konwertowanie go na różne formaty.
Naszym zadaniem jest więc przekonwertowanie daty do formatu perskiego. Dla przykładu, w naszym raporcie znajduje się wyrażenie [Data], które przywołuje dzisiejszą datę:
Wyrażenie [Data] uzyskuje bieżącą datę systemową w formacie DateTime, lecz wartością raportu tekstowego po wszystkich przetworzeniach jest String. Wytwórzmy nową funkcję w skrypcie raportu:
private void ConvertToPersianDate(object sender, EventArgs e)
Funkcję wywołamy z obiektów tekstowych. Utworzymy zmienną tymczasową, która będzie konwertować tekst obiektu na DateTime:
DateTime d = DateTime.Parse((sender as TextObject).Text);
"sender as TextObject" jest adresem do obiektu, który wywołał funkcję. Możemy korzystać z funkcję i właściwości obiektu, jeżeli w taki sposób się do niego odwołamy.
Następnie będzie nam potrzebny obiekt PersianCalendar, który będzie konwertował datę na format perski:
PersianCalendar pc = new PersianCalendar();
Zwróć uwagę, że obiekt ten znajduje się w bibliotece System.Globalization i musi być wskazany w sekcji "using". Następnie powinniśmy zmienić tekst obiektu.
Przyjrzyj się tej linii z większą dokładnością:
(sender as TextObject).Text = string.Format("{0}/{1}/{2}", pc.GetYear(d), pc.GetMonth(d), pc.GetDayOfMonth(d));
W tym miejscu ustawiamy tekst naszego obiektu. Wartość będzie w formacie rok/miesiąc/dzień, ponieważ używamy funkcji PersianCalendar, które pobierają odpowiednie wartości. Fragment kodu, w którym ustawiany jest tekst może być dowolnie edytowany. Na przykład kod dla daty w formacie dzień.miesiąc.rok wygląda tak:
"{0}.{1}.{2}", pc.GetDayOfMonth(d), pc.GetMonth(d), pc.GetYear(d)
W efekcie tego otrzymujemy następującą funkcję:
using System.Globalization; namespace FastReport { public class ReportScript { private void ConvertToPersianDate(object sender, EventArgs e) { // Converting to DateTime format DateTime d = DateTime.Parse((sender as TextObject).Text); // Creating an object for conversion PersianCalendar pc = new PersianCalendar(); // Creating a string using PersianCalendar // It is possible to change the string template (sender as TextObject).Text = string.Format("{0}/{1}/{2}", pc.GetYear(d), pc.GetMonth(d), pc.GetDayOfMonth(d)); } } }
Dodaj funkcję do zdarzenia AfterData odpowiedniego obiektu.
Teraz data wygląda tak:
Aby skorzystać z innych funkcji związanych z czasem, można skorzystać z poniższej tabeli:
GetDayOfWeek(), | Day of week |
GetMonth(), | Month |
GetDayOfMonth(), | Day of month |
GetYear(), | Year |
GetHour() | Hour |
GetMinute() | Minute |
GetSecond() | Second |
Teraz już wiesz jak zmienić format daty w raporcie. Ten artykuł może być przydatny przy zmianie formatu na (rok, miesiąc, dzień). Format ten jest używany w Japonii, Chinach, Korei Północnej, Korei Południowej, Tajwanie, na Węgrzech, Litwie i w Iranie; jest on również wykorzystywany jako format pomocniczy w niektórych krajach europejskich i azjatyckich.