Avatar billede frugten Nybegynder
01. september 2004 - 16:22 Der er 22 kommentarer og
2 løsninger

konvertering af millisekunder til dato

Findes der en rutine/algoritme der omregner millisekunder til dato og tid. Jeg skal bruge det i et .NET-projekt programmeret i C#
Det drejer sig om UNIX-sekunder, basis 1.1.1970
Avatar billede snepnet Nybegynder
01. september 2004 - 16:54 #1
Hvad siger du til denne her :
TimeSpan ts = TimeSpan.FromMilliseconds(double milliSeconds);

Og mon du så ikke kan lave en
DateTime result = DateTime.MinValue + ts;

DateTime.MinValue vil så afvige fra det du skal bruge, men du kan så lave en :

DateTime.MinValue.AddYears(1969) - så skulle den passe.

Mvh
Avatar billede arne_v Ekspert
01. september 2004 - 18:06 #2
Jeg ville nok lave:

DateTime result = (new DateTime(1970, 1, 1)).AddMilliseconds(ms);
Avatar billede snepnet Nybegynder
01. september 2004 - 18:12 #3
det nok ikke er sansynlig at man definerer MinValue til andet end 01-01-0001 ;o) (med mindre vi ændrer tidsregning) men pointen er god nok synes jeg.
Avatar billede arne_v Ekspert
01. september 2004 - 19:01 #4
Det er ikke så meget fordi jeg tror at de vil ændre basis (selvom MS
gjorde det for C time funktionen).

Men jeg synes bare at den variant er mere læselig/selvdokumenterende.
Avatar billede snepnet Nybegynder
01. september 2004 - 19:08 #5
ok - så misforstod jeg tydeligvis pointen, selvom jeg pralede så flot med jeg var med på den :oD

jeg vidste ikke det med time.... hvad ændrede de den fra (og til) ?
Avatar billede arne_v Ekspert
01. september 2004 - 19:19 #6
http://www.codeproject.com/datetime/datetimedisc.asp

lidt nede:

According to MSDN, in all versions of Microsoft C/C++ except Microsoft C/C++ version 7.0, and in all versions of Microsoft Visual C++, the time function returns the current time as the number of seconds elapsed since midnight on January 1, 1970 (i.e. epoch). In Microsoft C/C++ version 7.0, time returned the current time as the number of seconds elapsed since midnight on December 31, 1899.

Lyder som om ændrede det tilbage igen. Brugerne må være gået amok.
Avatar billede snepnet Nybegynder
01. september 2004 - 19:27 #7
hehe... ja der er nok nogle der har spidset blyanten og skrevet et par bevingede ord der :o) (men det er også lidt klamt at have en FIRSTdate der er et års LASTDATE - sikke noget...).

gad vide om det er pga. den slags, at de har valgt en DateTime.MinValue som værende den første dato i vor tidsregning....
det er da i hvert fald nemmere at forholde sig til (synes jeg personligt) end en reel "midt-imellem-det-hele-dato" (speceilt hvis den skifter :o).
Avatar billede arne_v Ekspert
01. september 2004 - 19:36 #8
Vi kan hurtigt blive enige om at 1-JAN-1970 er en håbløs Unix artifakt
som via C er slæbt ind over alt.

Men det er svært at ændre på noget når tilpas mange har vænnet sig til
at sådan er det.

Hvorfor bruger alle i,j,k som tællere i for løkker og ikke a,b,c ?
Avatar billede snepnet Nybegynder
01. september 2004 - 19:40 #9
HAHA - ja det var jo et godt spørgsmål.... De virker på en eller anden måde mere neutrale end abc :o)

men er der overhovedet en ækvivalent til den nævnte (time) funktion i .NET ?
(jeg synes ikke jeg kan finde noget tilsvarende... Ticks går også fra "dag 0")
Avatar billede arne_v Ekspert
01. september 2004 - 19:45 #10
FORTRAN som blev designet i 1957 kræver ikke erklæringer af variable.

Variable der starter med I-N er default INTEGER - alle andre er
default REAL.

Man vil selvfølgelig have en INTEGER som tæller i en løkke.

Så gæt hvad FORTRAN programmørerne begyndte at bruge.

Og hvad bruger vi andre næsten 50 år efter.
Avatar billede arne_v Ekspert
01. september 2004 - 19:46 #11
Jeg tror at man i .NET har forsøgt at tænke sig om, når man nu havde muligheden
for at starte på en frisk, så kunne man lige så godt gøre en masse ting
rigtigt.
Avatar billede snepnet Nybegynder
01. september 2004 - 19:51 #12
det virker i hvert fald sådan i mange sammenhænge... jeg har slet ikke været så meget rundt som du har, hvad programmeringssprog angår, men jeg synes bestemt at det er det mest effektive jeg har arbejdet med indtil nu.

det er helt vildt skægt det med FORTRAN - og egentlig også vældig interessant... tak for den.
(jeg kommer nok selv til at fyre den af en dag ;o)
Avatar billede arne_v Ekspert
01. september 2004 - 19:55 #13
FORTRAN er et spøjst sprog.

Linieskift er signifikante men det er mellemrum ikke.
Avatar billede snepnet Nybegynder
01. september 2004 - 20:02 #14
mystisk.... jeg har aldrig lavet noget i det. men jeg har da et par kolleger der har bikset med det i fordums tider tror jeg :o)
Avatar billede arne_v Ekspert
01. september 2004 - 20:12 #15
Der går en anekdote (vistnok *ikke* sand) om at en rum sonde til venus eller
en anden planet ramte forkert p.g.a. følgende kode fejl.

Man ville lave:

int i;
for(i=1;i<=10;i++)
{
  ...
}

det ser i FORTRAN ud som:

      DO 100 I=1,10
        ...
100  CONTINUE

men man kom til at lave et punktum i.s.f. et komma altså:

      DO 100 I=1.10
        ...
100  CONTINUE

hvilket altså svarer til:

int i = 0;
float do100i = 1.10;
...

og det er ligesom ikke helt det samme !
Avatar billede arne_v Ekspert
01. september 2004 - 20:14 #16
frugten>

Og undskyld at vi kører lidt derudaf i dit spørgsmål.
Avatar billede snepnet Nybegynder
01. september 2004 - 20:23 #17
hihi... der går en del af den slags historier.... nogle af dem skal jo nok være gode nok :o)
ja - egentlig lidt ubehøvlet.
frugten >> også undskyld herfra.
mvh
Avatar billede frugten Nybegynder
02. september 2004 - 16:41 #18
Hej begge to ;-)

Det har været lærerigt og interessant at følge jeres meningsudvekslinger og ved også at bruge dem, sammen med lidt læsning rundt omkring, har jeg fundet den rette løsning som virker i mit system.
Den er som følger herunder:

.........................................................

using System.Globalization;

...........................

                       
// Sets a DateTime to January 1, 1970 of the Gregorian calendar.
DateTime myDT = new DateTime( 1970, 1, 1, new GregorianCalendar() );

// Uses the default calendar of the InvariantCulture.
Calendar myCal = CultureInfo.InvariantCulture.Calendar;

...........................

// Convert to the expected format - double
double myvar_hugo1 = System.Convert.ToDouble(myPenStroke.startSecond);

// And finally add it to the start date
myDT = myCal.AddMilliseconds( myDT, myvar_hugo1 );

..........................................................

Foregår det inde i en løkke hvor der kommer flere timestamps erklærer man så en DateTime-variabel mere af samme type som myDT og sætter myvar_hugo1 = 0 for hvert gennemløb. Sidste linie kommer så til at se sådan ud:

ny_myDT = myCal.AddMilliseconds( myDT, myvar_hugo1 );

............................

Jeg er ny her i dette forum, så jeg skal lige have fundet ud af, hvordan man tildeler points (jeg synes at I skal have 30 hver) og hvordan jeg får lukket spørgsmålet.

Tak for hjælpen, frugten.
Avatar billede snepnet Nybegynder
02. september 2004 - 19:03 #19
vi svarer bare begge to, og så skulle der komme en boks frem, hvor du kan klikke på navnene og trykke på accepter :o)
Tak for de pæne ord.
mvh
Avatar billede arne_v Ekspert
02. september 2004 - 19:05 #20
svar
Avatar billede arne_v Ekspert
11. september 2004 - 21:10 #21
frugten>

?
Avatar billede snepnet Nybegynder
11. september 2004 - 21:20 #22
han blev nok alligevel træt af at høre på vores ævl :o)
Avatar billede arne_v Ekspert
19. september 2004 - 19:24 #23
??
Avatar billede frugten Nybegynder
20. september 2004 - 11:38 #24
Undskyld at det tog så lang tid. Jeg har ikke kunnet få det til at fungere med siden her, men håber nu, at det lykkedes.
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