Avatar billede bearhugx Nybegynder
31. juli 2001 - 05:32 Der er 11 kommentarer og
2 løsninger

Beregning af dage

Hejsa eksperter...

Jeg står med et problem, hvor jeg skal bedømme, hvormange dage der er fra én dato til en anden...

F.eks. hvis jeg vil finde ud af hvor mange dage der er gået siden jeg blev født (\"20 April 1979\") til i dag
(\"31 August 2001\")

Hvordan finder jeg ud af, hvor mange dage, det er...
Der skal \'helst\' automatisk justeres for skuddage osv...

Jeg arbejder i øjeblikket med at gemme alle datoer i \'java.util.GregorianCalendar\'-objekter, da jeg heletiden får \"deprecades\" ved brug af \'Date\' :-/ og fordi GregorianCalendar kan tage højde for skudår.

Håber dette var nok info - ellers krads en kommentar ned...

/Søren Munk Skrøder
Avatar billede disky Nybegynder
31. juli 2001 - 08:58 #1
Hejsa

Her er et eksempel som virker

Det udregner hvor mange dage jeg selv er gammel :)




import java.util.*;

public class DatoDif extends java.lang.Object
{

    /** Creates new DatoDig */
    public DatoDif()
    {
        System.out.println(\"Hallo\");
       
        GregorianCalendar start=new GregorianCalendar(1972,5,1);
        GregorianCalendar stop=new GregorianCalendar();
       
        long dif=stop.getTime().getTime()-start.getTime().getTime();
        System.out.println(\"Dif = \"+dif+\" milli sekunder\");
        int dage=(int)(dif/1000/60/60/24);
        System.out.println(\"Forskel i dage = \"+dage);
       
    }

    /**
    * @param args the command line arguments
    */
    public static void main (String args[])
    {
        new DatoDif();
    }
}
Avatar billede disky Nybegynder
31. juli 2001 - 09:00 #2
Måden det bliver regnet ud på er at jeg først får et Date object ud fra den gregorianske kalender.

Ud fra dette Date object får jeg nu at vide hvor mange millisekunder der er gået siden den 1. Januar 1970 kl 00:00:00 GMT

Dette gør jeg for både start og stop tid, så trækkes de fra hinanden og bliver regnet om til dage.
Avatar billede delbing Nybegynder
31. juli 2001 - 13:01 #3
Hvis man kun skal arbejde med dage har jeg altid synes at java seriøst mangler ordentlige klasser og metoder til det. Jeg bruger selv BigDate, kan downloades fra:
http://www.mindprod.com/zips/java/bigdate38.zip

her ville det se sådan ud:

BigDate start = new BigDate(1977, 10, 1);
BigDate stop = BigDate.localToday();
int dage = start.getOrdinal() - stop.getOrdinal();
System.out.println(\"Forskel i dage = \"+dage);
 
Du kan også direkte få forskellen i år og måneder, og der et hav af andre nyttige metoder i BigDate (og hvis du er historiker så kan den klare datoer under 1 mio år fra 1970 ;)


Avatar billede delbing Nybegynder
31. juli 2001 - 13:02 #4
ups, jeg trak dem fra i forkert rækkefølge
Avatar billede disky Nybegynder
31. juli 2001 - 13:08 #5
Hvorfor det, funktionaliteten mangler ikke i Java.

Men de har ikke pakket det sammen i en speciel klasse.

Mit eksempel viser jo tydeligt at det meget nemt kan udregnes.


Jeg synes derimod at bruge fremmede firmaers klasser er farligt, og properitært.
Avatar billede delbing Nybegynder
31. juli 2001 - 13:36 #6
Hvis du gerne selv vil sidde og konvertere millisekunder til dage selv, skal du da have lov til det - jeg kan bare ikke se hvad grunden er. Jeg har brug for det meget, og BigDate har sparet mig for en masse arbejde.
Og så er der alle de irriterende ting, som fx den første dag i ugen er 1, men januar er måned 0 i GregorianCalender. Alligevel har de i DateFormat.parse() valgt at januar er måned 1.

og det er næppe farligt at bruge klasser fra mindprod.com
Avatar billede disky Nybegynder
31. juli 2001 - 13:39 #7
har du nogensinde hørt om du bare kan pakke det ind i en wrapper klasse ?

Det er ikke et spørgsmål om det er farligt eller ej, jeg har bare flere gange som konsulent været ude for at firma IKKE vil have man bruger ting som ikke følger med JDK\'en.

Derfor vil jeg ikke bruge properitære ting som f.eks bigdate. Specielt ikke når funktionaliteten ikke mangler i JDK
Avatar billede delbing Nybegynder
31. juli 2001 - 14:10 #8
Hvis ens kunder insisterer på at man kun bruger JDK\'en, så er der selvfølgelig ikke meget at snakke om.

Efter min mening er det bare som regel spild af tid at implementere generelle ting, når næsten alt kan fås på nettet fra troværdige kilder. Hvad ville du gøre hvis du skulle lave en UploadServlet fx? Så er du tvunget til at skulle implementere en eller anden obskur RFC omkring multipart/form-data, specifikt http://www.ietf.org/rfc/rfc1867.txt og  http://www.ietf.org/rfc/rfc2388.txt - hygge! Der foretrækker jeg at surfe forbi fx www.oreilly.com, så jeg kan komme videre med opgaven.
Og hvad med JDBC drivere? Skriver du også dem selv? Connection pools?
Avatar billede disky Nybegynder
31. juli 2001 - 14:13 #9
delbing: nu er du vist en ordkløver af dimensioner.

Connection pools er forresten ret nemme at lave selv, men de java servere jeg kender har det indbygget.

JDBC drivere er externe produkter som oftest bliver bestemt af kunden, og derfor også købt.

Hvorimod små detaljer som f.eks bigdate vil de ikke have udefra, pga sikkerhed og lignende.

Bare se den hjemmeside du henviste til, den er hamrende dårligt lavet, jeg ville ikke stole på noget derfra. Men det er selvfølgelig helt op til dig.

Men nu kan du ikke sammenligne BigDate med f.eks. en jdbc driver. Da bigdate ikke kommer med funktionalitet som java mangler (den del vi har snakket om), det gør en driver.
Avatar billede delbing Nybegynder
31. juli 2001 - 14:41 #10
Igen, hvis kunderne ikke vil have at du bruger ting hentet udefra, så er der ikke meget at snakke om.

Connection pools er ret nemme at lave selv, ja, og jeg har da også modificeret den jeg bruger så den passer mig bedre. Og så ville jeg ikke bryde mig om at binde min software (mere end nødvendigt) til en specifik server ved at bruge deres pool.

At canadian mind products ikke har den fede hjemmeside er deres sag, de er ikke et kommercielt firma som sådan. En google-søgning på \"canadian mind products\" gav 1190 hits, og hvis du spørger på fx comp.lang.java.programmer om dem er jeg sikker på at du kun vil høre gode ting. Man skal ikke skue en hund på hårene.

type 4 JDBC drivere bruger da ikke noget funktionalitet som du ikke har til rådighed selv, så det argument forstår jeg ikke helt - de har da bare gjort arbejdet for dig.

Generelt er programmeringstid dog en værdifuld resurse, som ikke bør spildes på at sidde og gnidre med ting som andre allerede har lavet.
Avatar billede disky Nybegynder
31. juli 2001 - 14:46 #11
hvorfor så overhovedet lave noget selv, andre har jo lavet det.

Der gjorde du lige dig selv arbejdsløs :)
Avatar billede bearhugx Nybegynder
02. august 2001 - 02:07 #12
Den applikation, som jeg er igang med at lave hanlder om noget så eksotisk som Hinduistisk Astrologi. En af mine venner er astrolog, og han ville gerne have mig til at lette hans arbejdsgange...

Heldigvis er hinduistisk astrologi meget matematisk (undtagen selve fortokningen), og der skal regnes frem og tilbage mellem forskellige dage - dette skal gøres med stor præcision. Her tales om at finde ud af, hvormage dage der findes i en 120-års periode fra en bestemt dato, osv - og så derefter underdele den i kvota\'er efter de forskellige planeter....
Og i denne sammenhæng har GregorianCalender ikke været særlig nem at bruge...

Derimod har jeg varmt taget en modificeret version af BigDate til mig - Til min overraskelse var kildekoden også med, så jeg kunne \'rette\' de ting, som jeg havde brug for - samt lave nogle \'mere intuitive\' metoder, som lettede mit arbejde.

Og i denne sammenhæng er der ikke andre \'bosser\'/kunder end _mig_ som bestemmer, om der eksklusivt skal bruges standard SDK... og da jeg kan læse kildekoden kan jeg også vurdere \'sikkerheden\' af, hvad jeg arbejder med :-)) ....

Disky --> Argumentet med at man ikke bør stole på Canadian Mind Products - bare fordi man synes deres hjemmeside er lam er sgu\' det lammeste argument, jeg har hørt længe....
*Geez* - Ville det betyde, at jeg skulle synes at Microsoft _indbyder_ til \'sikkerhed og tillid\', bare fordi deres hjemmesider er flot designet :-?

Avatar billede disky Nybegynder
02. august 2001 - 08:54 #13
bearhugx:

Du misforstår da også alt. Jeg siger at hvordan skulle nogen kunne laver kvalitets software når deres hjemmeside er totalt dårligt lavet og rodet.
Indtrykket fra deres hjemmeside er dårligt, og flere ting jeg tidligere har set fra dem, er direkte dårligt, eller af ringe kvalitet.
Forresten er GregorianCalendar ikke svær at bruge, man skal bare gide tænke lidt selv.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester