[.net] SmallDateTime alleen datum

Pagina: 1
Acties:

  • Predje
  • Registratie: December 2002
  • Laatst online: 03-03-2025
Hey tweakers,

Heb gezocht, gegoogled, twee enorme .net boeken en 8 uur tijd verspild dus spaar me.

Ik snap de klote niet van asp.net terwijl .asp er als koek inging.

Ik heb de volgende functie van internet gehaald omdat ik het zelf niet kan;

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    Protected Sub CalendarDRender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs)
        'If the month is CurrentMonth
        If Not e.Day.IsOtherMonth Then
            Dim dr As DataRow
            For Each dr In ds.Tables(0).Rows
                'If EventDate is not Null
                If Not dr("StartDatumTijd") Is DBNull.Value Then
                    Dim dtEvent As Date
                    dtEvent = dr("StartDatumTijd")

                    'If EventDate =CalendarDate
                    If dtEvent.Equals(e.Day.Date) Then
                        e.Cell.CssClass = "MndCalSelDay"
                    Else

                    End If
                End If
            Next
            'If the month is not CurrentMonth then hide the Dates
        Else
            'e.Cell.Text = ""
        End If
    End Sub

Dit werkt allemaal goed zolang de tijd in het datetime veld in de database maar op 0:00 staat.
Is dit anders -wat ik wel wil- dan is de waarde niet gelijk aan de datum die is meegezonden.

Ik heb al veek dingen gelezen maar die zijn allemaal op query niveau en ik moet gewoon alle records doorlopen en daarmee een opgegeven datum vergelijken.

Ik weet dus dat datetime uit een datum en een tijd deel bestaat.. maar hoe haal ik die uit elkaar????

Kan iemand mij uit deze frustratie helpen...

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:58
Wat doet die functie eigenlijk ? Het is ook niet de bedoeling van p&w dat wij support geven op gedownloade scripts.
Heb je het stuk code al zelf eens gedebugged ?

Heb je al eens in de MSDN gekeken naar de members van DateTime; en dan met name de Date property ?

https://fgheysels.github.io/


Verwijderd

Predje schreef op woensdag 26 oktober 2005 @ 21:23:
Heb gezocht, gegoogled, twee enorme .net boeken en 8 uur tijd verspild dus spaar me.

Ik snap de klote niet van asp.net terwijl .asp er als koek inging.

Ik heb de volgende functie van internet gehaald omdat ik het zelf niet kan;

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    Protected Sub CalendarDRender(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DayRenderEventArgs)
        'If the month is CurrentMonth
        If Not e.Day.IsOtherMonth Then
            Dim dr As DataRow
            For Each dr In ds.Tables(0).Rows
                'If EventDate is not Null
                If Not dr("StartDatumTijd") Is DBNull.Value Then
                    Dim dtEvent As Date
                    dtEvent = dr("StartDatumTijd")

                    'If EventDate =CalendarDate
                    If dtEvent.Equals(e.Day.Date) Then
                        e.Cell.CssClass = "MndCalSelDay"
                    Else

                    End If
                End If
            Next
            'If the month is not CurrentMonth then hide the Dates
        Else
            'e.Cell.Text = ""
        End If
    End Sub

Dit werkt allemaal goed zolang de tijd in het datetime veld in de database maar op 0:00 staat.
Is dit anders -wat ik wel wil- dan is de waarde niet gelijk aan de datum die is meegezonden.

Ik heb al veek dingen gelezen maar die zijn allemaal op query niveau en ik moet gewoon alle records doorlopen en daarmee een opgegeven datum vergelijken.

Ik weet dus dat datetime uit een datum en een tijd deel bestaat.. maar hoe haal ik die uit elkaar????

Kan iemand mij uit deze frustratie helpen...
heeft weinig met asp.net te maken...

de StartDatumTijd-waarden in je dataset/database moeten gewoon inclusief tijdwaarden zijn?
Je wilt alle dagen "kleuren" die in je dataset/database staan?

Lijkt me niet meer dan logisch dat je alleen de datum vergelijkt, doh :P

Al eens gedacht aan:
dtEvent.Day
dtEvent.Month
dtEvent.Year

e.Day.Date.Day
e.Day.Date.Month
e.Day.Date.Year
Geen idee of de laatste drie regels kloppen, maar het gaat om het idee. Er zijn overigens legio andere oplossingen...

  • Predje
  • Registratie: December 2002
  • Laatst online: 03-03-2025
Ik heb het stukje code zelf eigelijk voor een groot deel al aangepast en debugged..

Ook heb ik de msdn library erop nagekeken.

Deze functie kijkt gewoon tijdens de dayrender van het calendercomponent of de dag binnen de maand valt en of er in de database een zelfde datum voorkomt. Dit gaat goed zolang bij alle dateTime velden de uren en minuten op 0:00 staan. (omdat de calendar geen uren en minuten kan doorgeven)

Ik moet echter wel weten van hoelaat tot hoelaat een afspraak loopt dus de tijd kan niet altijd 0:00 blijven.

Alles wat ik heb kunnen vinden is enkel om te zoeken op alleen de datum.. maar niet om van elke waarde alleen te datum te nemen om te kunnen vergelijken.

  • Predje
  • Registratie: December 2002
  • Laatst online: 03-03-2025
code:
1
2
3
4
5
6
7
8
9
                    Dim dtEvent As Date
                    dtEvent = dr("StartDatumTijd").Day

                    'If EventDate =CalendarDate
                    If dtEvent.Equals(e.Day.Date.Day) Then
                        e.Cell.CssClass = "MndCalSelDay"
                    Else

                    End If


werkt niet..

btw de laatste 3 regels kloppen wel en dit had ik idd nog niet geprobeerd buiten het queryNiveau.
De bovenstaande code geeft de volgende foutmelding;
Conversion from type 'Integer' to type 'Date' is not valid.
Voor de regel;
Dim dtEvent As Date
dtEvent = dr("StartDatumTijd").Day

Verwijderd

bijvoorbeeld...
code:
1
2
3
4
5
6
7
8
9
10
11
                    Dim dtEvent As Date
                    dtEvent = dr("StartDatumTijd")

                    'If EventDate =CalendarDate
                    If (dtEvent.Day = e.Day.Date.Day) andalso _
                      (dtEvent.Month = e.Day.Date.Month) andalso _
                      (dtEvent.Year = e.Day.Year) Then
                        e.Cell.CssClass = "MndCalSelDay"
                    Else

                    End If


of de tijd van dtEvent.Day "substracten" en dan vergelijken
code:
1
2
3
4
5
6
7
8
                    Dim dtEvent As DateTime = dr("StartDatumTijd")
                    dtEvent = New System.DateTime(dtEvent.Year,dtEvent.Month,dtEvent.Day,0,0,0,0)

                    If (dtEvent = e.Day) Then
                        e.Cell.CssClass = "MndCalSelDay"
                    Else

                    End If

Zelf ff checken i.v.m Date en DateTime conflicten/conversies.

[ Voor 56% gewijzigd door Verwijderd op 27-10-2005 12:16 . Reden: oeps typo in tweede stuk code ]


  • Predje
  • Registratie: December 2002
  • Laatst online: 03-03-2025
Ah, hartelijk dank, zal het straks thuis testen.
Ik kreeg idd vele conflicten.. en ik maak nu gebruik van dtEvent.Equals(e.date.day) omdat
dtEvent = e.date.day niet toegestaan is voor integers (aldus de foutmelding).

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Lees de MSDN documentatie van die zaken ook eens door. Het feit dat je een foutmelding nodig hebt om een class te doorgronden is niet echt netjes. Je zult dan zien dat de Day property van DateTime een int teruggeeft met daarin de dagwaarde (bijvoorbeeld 27 voor 27 oktober 2005). En dat een int != DateTime lijkt me duidelijk.

  • JJvG
  • Registratie: Juli 2003
  • Laatst online: 16:49
SmallDateTime veld registreerd geen tijd (in SQL Server). Doe maar eens een Insert (met tijd) en een select op dezelfde kolom, dan zul je zien dat de tijd er af is gehaald en op 0:00 is gezet.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
JJvG schreef op donderdag 27 oktober 2005 @ 11:11:
SmallDateTime veld registreerd geen tijd (in SQL Server). Doe maar eens een Insert (met tijd) en een select op dezelfde kolom, dan zul je zien dat de tijd er af is gehaald en op 0:00 is gezet.
Dit is niet correct. Zowel DateTime als SmallDateTime slaan beide zowel een datum als een tijd op.
Het verschil zit hem in de nauwkeurigheid (en dus opslagruimte)
datetime

Date and time data from January 1, 1753 through December 31, 9999, to an accuracy of one three-hundredth of a second (equivalent to 3.33 milliseconds or 0.00333 seconds). Values are rounded to increments of .000, .003, or .007 seconds, as shown in the table.

smalldatetime

Date and time data from January 1, 1900, through June 6, 2079, with accuracy to the minute. smalldatetime values with 29.998 seconds or lower are rounded down to the nearest minute; values with 29.999 seconds or higher are rounded up to the nearest minute.

Oops! Google Chrome could not find www.rijks%20museum.nl

Pagina: 1