1
2 #include <petscsys.h>
3 #if defined(PETSC_HAVE_SYS_TIME_H)
4 #include <sys/time.h>
5 #endif
6 #include <time.h>
7 #if defined(PETSC_NEEDS_GETTIMEOFDAY_PROTO)
8 PETSC_EXTERN int gettimeofday(struct timeval*,struct timezone*);
9 #endif
10
11 /*
12 This function is called once during the initialize stage.
13 It stashes the timestamp, and uses it when needed. This is so that
14 error handlers may report the date without generating possible
15 additional system errors during the call to get the date.
16
17 */
18 /*@C
19 PetscGetDate - Gets the current date.
20
21 Not collective
22
23 Input Parameter:
24 . len - length of string to hold date
25
26 Output Parameter:
27 . date - the date
28
29 Level: beginner
30
31 This function DOES make a system call and thus SHOULD NOT be called
32 from an error handler.
33
34 @*/
PetscGetDate(char date[],size_t len)35 PetscErrorCode PetscGetDate(char date[],size_t len)
36 {
37 char *str=NULL;
38 #if defined(PETSC_HAVE_TIME)
39 time_t aclock;
40 #else
41 struct timeval tp;
42 #endif
43 PetscErrorCode ierr;
44
45 PetscFunctionBegin;
46 #if defined(PETSC_HAVE_TIME)
47 time(&aclock);
48 ierr = PetscStrncpy(date,asctime(localtime(&aclock)),len);CHKERRQ(ierr);
49 #else
50 gettimeofday(&tp,(struct timezone*)0);
51 ierr = PetscStrncpy(date,asctime(localtime((time_t*)&tp.tv_sec)),len);CHKERRQ(ierr);
52 #endif
53 /* now strip out the new-line chars at the end of the string */
54 ierr = PetscStrstr(date,"\n",&str);CHKERRQ(ierr);
55 if (str) str[0] = 0;
56 PetscFunctionReturn(0);
57 }
58
59