Witam,
W jaki sposób można w C# konwertować DateTime, który ma format yyyy-MM-dd na zapis w postaci CLARION czyli int. W MSSQL wiem jak to się robi,
ale jak to zrobić w C# ???
- Rejestracja:prawie 4 lata
- Ostatnio:ponad rok
- Postów:148
- Rejestracja:około 12 lat
- Ostatnio:33 minuty
- Postów:1435
A specyfikacja jakaś tego formatu? Potrzebne Ci to przypadkiem do Optimy? Zgodnie z tym co tu jest napisane https://sulmar.blogspot.com/2017/04/konwersja-daty-w-cdn-optima.html
Nie do końca jest tak jak opisano w artykule. Data w rozwiązaniach Comarch (Optima i XL) może być kodowana na kilka sposobów w tym:
- Tzw. "Krótki Clarion" - ciąg 5 cyfr, które przechowują informację o ilości dni od daty '1800-12-28' - służy do zapisu dnia
- Tzw. "Długi Clarion" - ciąg 9 cyfr, które przechowują informację o ilości sekund od daty '1990-01-01' - służy do zapisu dnia i godziny
- Zwykła data w SQL, w części struktur data jest kodowana jako datetime lub date na bazie.
Więc ja bym to załatwił operacjami na datach, tj. (date - new Date(1800,12,28)).Days
i podobne, pod warunkiem, że miałbym jak sprawdzić jakieś wzorcowe wyniki.
- Rejestracja:prawie 4 lata
- Ostatnio:ponad rok
- Postów:148
Ok, poradziłem sobie wykorzystując SQL i następnie podstawiając datę w formacie Clarion do zmiennej.
- Rejestracja:ponad 7 lat
- Ostatnio:5 miesięcy
- Postów:1065
Dawno nie uzywałem ale mam takie coś z dawniejszych czasów
public static class ClarionDateTimeExtensions
{
public static int GetClarionDate(this DateTime date)
{
DateTime baseDate = DateTime.Parse("1801-01-01");
System.TimeSpan ts = date - baseDate;
int l = ts.Days + 4;
return l;
}
public static int GetClarionTime(this DateTime date)
{
int l = date.Hour * 360000;
l += date.Minute * 6000;
l += date.Second * 100;
l += date.Millisecond / 10;
return l + 1;
}
}



- Rejestracja:ponad 7 lat
- Ostatnio:5 miesięcy
- Postów:1065
Przepraszam wszyskich za kwrawiące oczy. Nie obiecują jakiejś drastycznej poprawy ale rozumiem, że to mogło być bolesne. :)
public static class ClarionDateTimeExtensions
{
public static int GetClarionDate(this DateTime date)
{
return (date - new Date(1800,12,28)).Days;
}
public static int GetClarionTime(this DateTime date)
{
return (int)(date.TimeOfDay.Ticks / 100000);
}
}

Ticks / 100000
można dać TotalMilliseconds / 10

- Rejestracja:prawie 4 lata
- Ostatnio:ponad rok
- Postów:148
Ok, a teraz załóżmy, chcemy przy pomocy C# odczytać z bazy MSSQL czas, który jest zapisany w postaci Clarion. Załóżmy kolumna ma nazwę k1 i mamy w niej wartość 6450000 - wartość uzyskana z DateTime w formacie "HH:mm". Odczytując w C# powinniśmy mieć wynik 17:55. Jak to zrobić ? :)
