GMOT
Nieuws:
 
*
Welkom, Gast. Alsjeblieft inloggen of registreren. 17 Juni 2019, 22:29:17


Login met gebruikersnaam, wachtwoord en sessielengte


Pagina's: [1] 2
  Print  
Advertenties


Uther
Look mum, I can post!
*

Berichten: 20


Bekijk profiel
« Gepost op: 21 Oktober 2015, 19:00:40 »

Hallo,

Voor mijn Java programma wil ik controleren of een begintijd en eindtijd op een opgegeven weekdag tussen vrijdag 18:00 en maandag 10:00 liggen.

Nu kan ik op internet genoeg vinden over het controleren of een datum binnen een bepaalde periode ligt, maar niet over het controleren of een datum binnen bepaalde dagen en tijd ligt (dus geen vaste datum).

Ik heb beperkte kennis van Java en ik zie dus niet in hoe ik dit op een fatsoenlijke manier kan oplossen.

Zou iemand me een opstapje kunnen geven?

Uther
Gelogd

Sunnywout
Infinity
*********

Berichten: 17.710


speel mijn game


Bekijk profiel WWW
« Antwoord #1 Gepost op: 21 Oktober 2015, 19:13:33 »

Allereerst een waarschuwing: dit is (volgens mij) je enige post hier tot nu toe. Misschien lijkt het zo, maar we zijn niet echt een dedicated vraag-en-antwoord community, meer een soort hechte groep retards die af en toe vragen heeft.

Maar je stelt je vraag netjes, geeft aan wat je hebt geprobeerd en gebruikt ons niet als afhaalchinees dus ik vind het prima. Kan alleen zijn dat mensen na mij boos doen.

Probeer met je programma uit te vinden wanneer de volgende vrijdag en de volgende maandag van die datum is. In PHP kun je dit bijvoorbeeld doen met
strtotime('next monday'$time)
. Wellicht dat dat met Java ietsje ingewikkelder gaat.

Je zou bijvoorbeeld de tijd van je referentiepunt op 00:00 kunnen zetten, en telkens 24 uur erbij optellen tot getWeekDay() (oid, geen idee hoe het heet) vrijdag of maandag geeft.

Dan heb je namelijk de juiste data en kun je weer ouderwets vergelijken ^^.
Gelogd

shitposting is a lifestyle, not a disease

Uther
Look mum, I can post!
*

Berichten: 20


Bekijk profiel
« Antwoord #2 Gepost op: 21 Oktober 2015, 19:20:17 »

Bedankt voor je snelle reactie!

Dit is inderdaad mijn eerste post hier. (Ik heb een ander account, maar ik weet het wachtwoord niet meer en geen van mijn e-mailadressen lijken te kloppen. Aangezien ik op GMChat ook Uther heet, dacht ik maar een nieuw account aan te maken met dezelfde naam, misschien wel wat duidelijker ook zo. ;3)

Zelf zat ik inderdaad ook te denken aan het ophalen van de vorige vrijdag en de volgende maandag, om dit vervolgens te vergelijken maar ik kan nergens vinden hoe dit moet. De een gebruikt een Date object, de ander een Calendar object, weer iemand anders gebruikt SimpleDateFormat.

Ook blijken bepaalde classes of het gebruik ervan depcrecated. Vandaar dat ik hier mijn vraag stel.
Gelogd

Robbai
Pretty addicted
*******

Berichten: 3.299


Bekijk profiel
« Antwoord #3 Gepost op: 21 Oktober 2015, 19:25:17 »

Complimenten voor je manier van vragen stellen inderdaad, is hier ongekend.

Je hebt op internet al verschillende manieren gevonden, hoogstwaarschijnlijk werken ze ook (bijna) allemaal naar wens. Het is niet ongebruikelijk dat een functie op meerdere manieren kan worden uitgevoerd.

Heb je ze al geprobeerd in je programma te implementeren?
Gelogd

Uther
Look mum, I can post!
*

Berichten: 20


Bekijk profiel
« Antwoord #4 Gepost op: 21 Oktober 2015, 19:31:40 »

Nouja, bij de oplossingen die ik op internet vind, is het probleem net iets anders.

Vaak gaat het om het controleren of een datum tussen 2 andere data ligt.
Bijvoorbeeld of "nu" tussen "21 oktober 2015 20:28:23" en "24 oktober 2015 20:28:23" ligt.

Wat ik probeer, is of "nu" tussen "vrijdag 18:00" en "maandag 10:00" ligt. Ik zou dus inderdaad moeten berekenen wanneer de vorige vrijdag was, en of dat in dezelfde week ligt als vandaag. Want als dat zo is, betekent dat, dat het zaterdag of zondag is. Hetzelfde met de volgende maandag.

Ik heb alleen geen flauw idee hoe ik dit om moet zetten naar Java.
Gelogd

Sunnywout
Infinity
*********

Berichten: 17.710


speel mijn game


Bekijk profiel WWW
« Antwoord #5 Gepost op: 21 Oktober 2015, 19:32:33 »

Gebruik Calendar. Date is er puur voor legacy en kan veel minder.
Gelogd

shitposting is a lifestyle, not a disease

Sunnywout
Infinity
*********

Berichten: 17.710


speel mijn game


Bekijk profiel WWW
« Antwoord #6 Gepost op: 21 Oktober 2015, 19:34:09 »

Ik zou dus inderdaad moeten berekenen wanneer de vorige vrijdag was, [...]

Tot uw dienst Smiley

Code: (Pseudo-code)
vandaag = nu();

while (vandaag.dag != 'vrijdag') {
  vandaag.tijd = vandaag.tijd - 24 uur;
}

Dit is in Java best goed te doen Cheesy.
Gelogd

shitposting is a lifestyle, not a disease

Uther
Look mum, I can post!
*

Berichten: 20


Bekijk profiel
« Antwoord #7 Gepost op: 21 Oktober 2015, 19:47:49 »

Haha dankjewel! Cheesy

Ik heb het "omgezet" naar het volgende:

Code:
// Vorige vrijdag
Calendar today = Calendar.getInstance();

while (!(today.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY))
{
today.add(Calendar.DAY_OF_WEEK, -1);
}

System.out.println((new SimpleDateFormat()).format(today.getTime()));


// Volgende maandag
today = Calendar.getInstance();

while (!(today.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
{
today.add(Calendar.DAY_OF_WEEK, 1);
}

System.out.println((new SimpleDateFormat()).format(today.getTime()));

Ik zal nu zelf eerst eens proberen om te controleren of de opgegeven weekdag + tijd binnen deze 2 data valt, en als ik er niet uitkom zal ik dit bericht bewerken. Smiley
Gelogd

MBeentjes
Pretty addicted
*******

Berichten: 3.611


Bekijk profiel
« Antwoord #8 Gepost op: 21 Oktober 2015, 19:50:03 »

Ik negeer al je bovenstaande een beetje en richt me op 'controleer of een datum tussen twee andere data valt'. Is het niet simpel om beide datums te converteren naar een timestamp (dit zijn integere waarden) en dan met een simpel if-statement controleren of de stelling waar is?
Gelogd

Uther
Look mum, I can post!
*

Berichten: 20


Bekijk profiel
« Antwoord #9 Gepost op: 21 Oktober 2015, 19:51:49 »

Ik negeer al je bovenstaande een beetje en richt me op 'controleer of een datum tussen twee andere data valt'. Is het niet simpel om beide datums te converteren naar een timestamp (dit zijn integere waarden) en dan met een simpel if-statement controleren of de stelling waar is?

Het gaat in dit geval niet om "vaste" data, maar om "vrijdag 18:00" en "maandag 10:00", het zijn geen 2 data die maar 1x op de tijdlijn voorkomen, volgens mij kun je dat niet omzetten naar een timestamp.
Gelogd

MBeentjes
Pretty addicted
*******

Berichten: 3.611


Bekijk profiel
« Antwoord #10 Gepost op: 21 Oktober 2015, 19:57:27 »

Het gaat in dit geval niet om "vaste" data, maar om "vrijdag 18:00" en "maandag 10:00", het zijn geen 2 data die maar 1x op de tijdlijn voorkomen, volgens mij kun je dat niet omzetten naar een timestamp.
Ah okay, sorry. Dan kan dat inderdaad niet 1,2,3. Met jouw verwerkte code (op basis van Sunnywout zijn tips) moet je een eind komen. Succes!
Gelogd

Sunnywout
Infinity
*********

Berichten: 17.710


speel mijn game


Bekijk profiel WWW
« Antwoord #11 Gepost op: 21 Oktober 2015, 20:26:25 »

IANAJC (I Am Not A Java Coder) overigens. Ik programmeer wel eens incidenteel Java als een framework oid het vereist, maar ik heb het vast hopeloos inefficiŽnt aangepakt. This Is Not Legal Advice Tongue.
Gelogd

shitposting is a lifestyle, not a disease

Uther
Look mum, I can post!
*

Berichten: 20


Bekijk profiel
« Antwoord #12 Gepost op: 21 Oktober 2015, 20:33:06 »

Volgens mij hebben we de denkwijze een beetje verkeerd.
"Vandaag" ligt namelijk altijd tussen de vorige vrijdag en de volgende maandag. Tongue

Desalniettemin heb ik het toch geprobeerd op te lossen...
Code:
Calendar lastFriday = Calendar.getInstance();
Calendar nextMonday = Calendar.getInstance();
Calendar today = Calendar.getInstance();

while (!(lastFriday.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY))
{
lastFriday.add(Calendar.DAY_OF_WEEK, -1);
}

lastFriday.set(Calendar.HOUR, 18);        

while (!(nextMonday.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
{
nextMonday.add(Calendar.DAY_OF_WEEK, 1);
}

nextMonday.set(Calendar.HOUR, 10);

if (today.WEEK_OF_YEAR == lastFriday.WEEK_OF_YEAR && today.WEEK_OF_YEAR < nextMonday.WEEK_OF_YEAR && today.getTimeInMillis() > lastFriday.getTimeInMillis())
{
System.out.println("Toeslag betalen");
}

if (today.WEEK_OF_YEAR > lastFriday.WEEK_OF_YEAR && today.WEEK_OF_YEAR == nextMonday.WEEK_OF_YEAR && today.getTimeInMillis() < nextMonday.getTimeInMillis())
{
System.out.println("Toeslag betalen");
}

...en het ziet er inderdaad best inefficiŽnt uit als ik heel eerlijk ben. Tongue

Weet iemand of er een makkelijkere manier is?

Edit:
Ik heb voor mezelf de vraagstelling wat veranderd.
In plaats van te controleren of een datum tussen "vrijdag 18:00" en "maandag 10:00" ligt, is het makkelijker om te controleren of een datum niet tussen "maandag 10:00" en "vrijdag 18:00" ligt. Hierdoor ben ik uitgekomen op de volgende code:

Code:
Calendar monday = Calendar.getInstance();
Calendar friday = Calendar.getInstance();
Calendar today = Calendar.getInstance();

while (!(monday.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY))
{
monday.add(Calendar.DAY_OF_WEEK, -1);
}

while (!(friday.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY))
{
friday.add(Calendar.DAY_OF_WEEK, 1);
}

monday.set(Calendar.HOUR_OF_DAY, 10);
monday.set(Calendar.MINUTE, 0);
monday.set(Calendar.SECOND, 0);

friday.set(Calendar.HOUR_OF_DAY, 18);
friday.set(Calendar.MINUTE, 0);
friday.set(Calendar.SECOND, 0);

if (!(today.WEEK_OF_YEAR == monday.WEEK_OF_YEAR && today.WEEK_OF_YEAR == friday.WEEK_OF_YEAR && today.getTimeInMillis() > monday.getTimeInMillis() && today.getTimeInMillis() < friday.getTimeInMillis()))
{
System.out.println("Toeslag");
}
else
{
System.out.println("Geen toeslag");
}
« Laatste verandering: 21 Oktober 2015, 21:45:09 door Uther » Gelogd

Sunnywout
Infinity
*********

Berichten: 17.710


speel mijn game


Bekijk profiel WWW
« Antwoord #13 Gepost op: 21 Oktober 2015, 21:46:59 »

Haha, goeie Tongue.

Wat probeer je nou eigenlijk uit te zoeken? Ik kan je zo namelijk niet 1, 2, 3 vertellen of dit de beste manier is zonder te weten wat ongeveer je doel is.
Gelogd

shitposting is a lifestyle, not a disease

Uther
Look mum, I can post!
*

Berichten: 20


Bekijk profiel
« Antwoord #14 Gepost op: 21 Oktober 2015, 21:49:38 »

Tussen "vrijdag 18:00" en "maandag 07:00" moet 15% toeslag worden betaald. Er moet dus berekend worden of de opgegeven datum tussen de bovenstaande data valt.
Gelogd


Advertenties
Pagina's: [1] 2
  Print  

 
Ga naar:  

Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines | Smartphoneversie bekijken

Dilber MC Theme by HarzeM