C# DateTime do formatu Clarion

0

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# ???

1

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:

  1. 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
  2. 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
  3. 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.

0

Ok, poradziłem sobie wykorzystując SQL i następnie podstawiając datę w formacie Clarion do zmiennej.

1

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;
	}
}
3

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);
	}
}
0

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ć ? :)

0
public TimeSpan GetTimeFromClarion(int time)
{
  return new TimeSpan(time * 100000l);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1