Hello Folks >CLng(Cdate(Now)) lämnar ett långt heltal räknat från Håller med... Hej >Lätast att bara formatera datum till amerikanskt format. Förlåt om jag lägger mig i diskussionen. Jag kanske misstar mig. Men har för mig att Amerikanskt format fungerar OAVSETT lokala inställningar. Med andra ord, om man gör ett program som även skall ungera med andra lokala inställningar. Använd Amerikanskt format. Hej >Men har för mig att Amerikanskt format fungerar OAVSETT lokala inställningar. Det är ju självklart att dtumet skall visas som användaren angivet. Jag menr när man skickar det som argument i en SQL sats... Har för mig att vissa fall tolkar den svenskt datum felaktigt... Näää... Vilken total nyhet... Jag som trode datum var fotoner i binärt format. komprimerade med winzip... Hej Vad snäll du är som bryr dig tillräckligt mycket om mig. För att försöka få mig att förstå. Men jag behöver konkreta exempel för att förstå. Du får lov att kalla mig idiot. Men behöver fortfarande konkreta exempel... HejDatum och matematik i VB
Det där med att hantera datum och matematik i DataBaser
har alltid varit lite småstruligt.
Jag kör numera konsekvent datum som långt heltal i databas
Funktionen CDate är ett utmärkt verktyg. DateDiff i all ära
men det blir ganska rörigt.
CLng(Cdate(Now)) lämnar ett långt heltal räknat från
1900-01-01 , idag 2001-07-02 blir 37074
CLng(CDate("2001-06-01")) blir 37043
Man återomvandlar med Format$(37074,"yyyy-mm-dd")
Option Explicit
Private Sub Command1_Click()
Dim lngDateNow As Long, lngDate2 As Long
lngDateNow = CLng(CDate(Now)) '2001-07-02 ger 37074
lngDate2 = CLng(CDate("2001-06-01")) 'ger 37043
If lngDateNow - lngDate2 > 30 Then _
MsgBox "30 dagars provtid har överskridits"
End Sub
Format$(-37074,"yyyy-mm-dd") ger ett datum före 1900
mvh
SvenSv: Datum och matematik i VB
1900-01-01 , idag 2001-07-02 blir 37074
Se upp med timmar och minuter bara. De försvinner vid omvandling till Long, och kan ge lite oväntat resultat. T.ex
Dim l As Long
l = CLng(#6/1/2001 1:00:00 PM#)
MsgBox Format$(l, "yyyy-mm-dd") ' visar 2001-06-02
Vill du slippa det bör du köra med Double istället för Long.
>CLng(CDate("2001-06-01")) blir 37043
Sen skulle jag rekommendera att aldrig använda strängar för att lagra datum heller. Ovanstående kod skulle kunna ge ett type mismatch fel om det körs på en maskin där "yyyy-mm-dd" inte är ett giltigt datumformat. Bättre är att köra med VBs datumkonstanter inom ##, som ovan.
MSSv: Datum och matematik i VB
Men varför jobba sig med tal???
Lätast att bara formatera datum till amerikanskt format.
mm/dd/yyyy hh:nn:ss
Funkar även när man har svensk inställning...Sv: Datum och matematik i VB
>Men varför jobba sig med tal???
Därför att man använder tal i matematik.
Till MS inlägg : Bra du har alldeles rätt i dina kommentarer
det gäller att vara heltäckande när man gör inlägg :-)
> Se upp med timmar och minuter bara. De försvinner vid omvandling >till Long, och kan ge lite oväntat resultat.
Just det därför skall man inte använda Now
CLng(Cdate(Date)) blir bättre.
Ha det i sommarvärmen
mvh
SvenSv: Datum och matematik i VB
>mm/dd/yyyy hh:nn:ss
>
>Funkar även när man har svensk inställning...
Det finns fler länder här i världen än USA och Sverige...
MSSv: Datum och matematik i VB
Men man kan ju modifiera datumet mattimatiskt utan att konvertera det till long, eller?
Dim vTemp as date
vTemp = Date + 12 'Tolv dagar i framtiden
vTemp = vTemp + (1/24) 'Plus en timma
Men jag föreslår Dateadd funktionen och DateSerial. Tycker det är bättre att använda dessa en att behöva trixa med tal...
För er som undrar var "DateSubract" funktionen är. Sett bara ett minus
framför värdet och använd Dateadd... :O)
SvenPon Har jag missat din anledning, eller fördelarana med att använda long?Sv: Datum och matematik i VB
Om detta är fel. Kan du väl referera till test eller information om detta så jag och eventuella andra kan göra på det "rätta" sättet...
/Puss & Kram - Andreas (VB - Diva)Sv: Datum och matematik i VB
>Tycker det är bättre att använda dessa en att behöva trixa med tal...
Det är en kapacitets fråga .Eftersom alla Datum/Tid funktioner
använder matematik i sitt innre så passar det bättre mitt sätt att tänka.
Om du inte förstår det kan jag tala om att Datum är ett tal.
mvh
SvenSv: Datum och matematik i VB
Det är möjligt, men inget jag skulle lita på.
>Med andra ord, om man gör ett program som även skall ungera med andra lokala inställningar. Använd Amerikanskt format.
Olika datumformat används ju främst när man ska visa datumet för användaren. Och då tycker jag det vore lite oartigt att alltid köra med amerikanskt format, eftersom det i många fall inte är vad användaren är van att se.
Internt i programmet är det väl bäst att hantera datum med just Date variabler, där olika format inte har någon betydelse.
MSSv: Datum och matematik i VB
Sv: Datum och matematik i VB
Vill tacka dig för att du upplyser folk om det. Men jag har väldigt lite användning av det. Så om du skulle kuna ge mig konkreta exempel då det är användbart. Skulle jag börja dyrka dig. Å, allsmäktiga HP41CV, SinqlairQL, Amiga, PC, Basic, VB och Delphi guru...Sv: Datum och matematik i VB
>Vill tacka dig för att du upplyser folk om det.
Det var inte till folk det var till dig, dom andra förstår
säkert att matematik och programmering går han i hand.
Och i matematik använder man företrädesvis tal.
DSSv: Datum och matematik i VB
Hoppas du kan stå ut med mig ändå... :O)Sv: Datum och matematik i VB
>Men jag behöver konkreta exempel för att förstå.
Många av mina projekt arbetar med diagram.
Om då X axeln beskriver datum ,är det mycket praktiskt att
tänka på datum som ett långt heltal ,med 5 tecken(eller fler siffror) kan jag
beskriva vilket datum jag vill från kristi födelse till 2100 och
mer. Sedan översätter man dessa 5 siffror till ett aptitligt format
för användaren.
Är man historiskt intresserad kan man tänka på 6/11 1632 som
- 97573 , 100000 blir 2173-10-14 osv osv.
DS