A következő címkéjű bejegyzések mutatása: Dátumkezelés. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: Dátumkezelés. Összes bejegyzés megjelenítése

2006-11-20

Dojo dátumválasztó agyműtét

Még mindig Dojo. Két baj volt a DropdownDatePicker-rel ami miatt bele kellett kicsit másznom a kódba. Az egyik, hogy ha érvénytelen értéket írok bele a HTML-ben, akkor hülyén jelenik meg a dátumválasztó (mindenhol NaN van), márpedig nem ártana ha megjelenítené azt az érvénytelen értéket is a szövegmezőben, a dátumválasztó komponensben meg pl. a mai napot. A másik, hogy a 0.3-0.4 verzióváltás egy kicsit döcögősre sikerült. Megváltoztak mezők nevei (date-value, displazFormat-dateFormat) és senki sem védi meg tőle a doksikkal nem elhalmozott programozót hogy keverve használja ezeket a dolgokat.

Állítólag az első problémát már próbálják orvosolni a 0.4.1-re, de nem nagyon bízom benne hogy úgy sikerül ahogy kellene neki. A repo-ban is olyat olvastam, hogy valaki bekommitolt valamit, a másik kipróbálta és nem működött. Verziók...

Szóval a következőt csinálja ez a dropdowndatepicker:

  1. A value mezőből kiolvassa a string értéket és megpróbálja dátummá konvertálni. Próbálja Rfc3339-es (yyyy-mm-dd) formátumban is meg más formátumban is. Közben warningol, mert Rfc3339 lesz a támogatott 0.5-től és senki sem azt használja. Ha sikerül neki a parse-olás akkor a value változóban egy szép érvényes dátum objektum lesz, ha nem sikerül akkor egy érvénytelen dátum. (Ami baj, mert máris elveszett az eredetileg beírt érték.)
  2. Ezután a dátum szerint beállítja a dátumválasztó komponenst. Ha érvénytelen volt a dátum, mindenhol NaN lesz.
  3. Végül a dátumválasztó állapota szerint visszaírja a szövegmezőbe a dátumot a megadott formátummal. Tehát ha véletlenül megmaradt volna az érvénytelen érték, még itt is felülvágná.
Ráadásul Post-olás előtt, ha érvénytelen dátum van a szövegmezőben, akkor felülvágja a komponensen kiválasztott dátummal, de ez csak a 0.4-es verzióban támogatott displayFormat használatánál jelentkezik. Van is egy szép TODO komment ezzel kapcsolatban a forrásban.

Szóval a következő helyeken nyúltam bele az agyába:

  • Ha a kiolvasásnál nem tudja dátummá konvertálni, nem ír vissza érvénytelen dátumot, hanem magát a string-et írja vissza.
  • Ha a dátumválasztó komponens beállítása előtt érzékeli hogy a value típusa string, a komponensen a mai napot jeleníti meg.
  • Ha a value típusa string, nem frissíti a szövegmezőt a komponens értéke szerint (mai nap).

Ha lenne attach-olási lehetőség, beraknám ide a kódot.

2006-10-26

Dojo 0.4

Kijött a Dojo 0.4-es verziója, bele is raktam az éppen aktuális projektbe a 0.3 verzió helyett. Ez ugye elvileg úgy megy java webalkalmazás esetén, hogy bele kell tenni a dojo src könyvtárát a webalkalmazás WEB-INF könyvtárába. Verziókövető rendszer szempontjából ez kicsit macerás, mert rengeteg kis fájlról van szó és ha az egészet le kell cserélni az kissé sokáig tart. Nekem például tíz percig tartott mire betettem a VSS-be az Eclipse pluginnel, persze VPN-en keresztül.

Túl sok dolgot nem használok még a Dojo-ból, csak egy dátumválasztó komponenst, ami kicsit változott a két verzió között. Na nem sokat, csak annyit, hogy date helyett most már value -vel kell megmondani az értékét. Remélem jó okuk volt rá hogy átírják. Nem okozott túl nagy törést, megoldottam pár perc alatt, de azért nem jó ha ok nélkül változgatnak elnevezések. Ha valami közös nevezőre akarták hozni valamivel akkor oké. Még a dojo.require("dojo.widget.html.DatePicker"); sort kellett kiszednem a kódból, mert egyrészt enélkül is megy, másrészt az IE javascript warning-ot dobált miatta.

Akartam használni a SortableTable-t is, de több probléma is volt vele. Meg kell adni az oszlopok típusát és erre még nincs felkészítve az alkalmazásunk, ha pedig mindent String-ként kezelek, a számok rosszul lesznek rendezve. Pl. "123"-nál nagyobb lesz a "2". A dátumok is rosszul kezelődnek a dátumformátumtól függően. Ezekre van megoldás a Dojo-ban, viszont a másik gond, hogy elrontja a táblacellák elrendezését. Hiába mondom meg, hogy egy TD align Left és Top legyen, visszateszi az alapértékre. class-ot is hiába mondok meg.

Kicsit gyér a Dojo dokumentációja még, (persze látszik hogy igyekeznek) emiatt próbáltam keresni Dojo fórumokat, de egyelőre nem találtam meggyőzőt. A dojotoolkit.org-on van egy levlista, de arra nem íratkozok fel, mert nem kérek napi 100 levelet, aminek X százaléka szemét. A Nabble-s fórumot gyakorlatilag elsőnek dobta ki a Google. Azzal az idióta rendszerrel megy, hogy 1 kérdés 1 téma és elég ömlesztett, de még majd barátkozom vele. Lehet hogy be fog jönni.

2005-08-09

C# dátumkezelés

A dátumokkal mindig van valami zűr, úgyhogy ha valamit megtudok ide beírom, és ha újra kell akkor itt megnézem.

A DateTime először is value típus úgyhogy nem lehet neki null-t beállítani. Ezt legegyszerűbben úgy szokták kiküszöbölni hogy DateTime.MinValue-t állítanak be neki ami 1970.01.01-es dátumnak felel meg. Nem kell mondanom hogy ennek mi a hátránya.

Dátumformázás C#-ban:


string s = "2005-03-28 06:50";
try {
//see DateTimeFormatInfo for patterns
DateTime d = DateTime.ParseExact(s, "yyyy-MM-dd HH:mm", null);
Console.WriteLine(d.ToString("yyyyMMddHHmm"));
} catch(FormatException ex) {
Console.WriteLine("wrong date format.");
}

A DateTime value típus tárolja ugye a dátumot. A DateTime.Now adja rögtön vissza az aktuális dátumot, a DateTime Ticks propertyje pedig 100 nanosecundom "pontossággal" az óraütések számát. (Értsd.: 1 tick = 100 nanosec.) Ha a ticket megszorzom 10000-rel, akkor jön ki a milliszekundom. Loggolásnál hasznos.

Ha a mai nap kezdetére vagyunk kíváncsiak, akkor hasznos a:
now.Subtract(now.TimeOfDay);

Update 2008.07.23: Cikk a softwareonline-on a témában.