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 /*@C 12 PetscGetDate - Gets the current date. 13 14 Not Collective 15 16 Input Parameter: 17 . len - length of string to hold date 18 19 Output Parameter: 20 . date - the date 21 22 Level: beginner 23 24 Note: 25 This function makes a system call and thus SHOULD NOT be called from an error handler. 26 27 Developer Notes: 28 This function is called once during `PetscInitialize()`. 29 It stashes the timestamp, and uses it when needed. This is so that 30 error handlers may report the date without generating possible 31 additional system errors during the call to get the date. 32 33 .seealso: `PetscGetHostName()` 34 @*/ 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 44 PetscFunctionBegin; 45 #if defined(PETSC_HAVE_TIME) 46 time(&aclock); 47 PetscCall(PetscStrncpy(date, asctime(localtime(&aclock)), len)); 48 #else 49 gettimeofday(&tp, (struct timezone *)0); 50 PetscCall(PetscStrncpy(date, asctime(localtime((time_t *)&tp.tv_sec)), len)); 51 #endif 52 /* now strip out the new-line chars at the end of the string */ 53 PetscCall(PetscStrstr(date, "\n", &str)); 54 if (str) str[0] = 0; 55 PetscFunctionReturn(PETSC_SUCCESS); 56 } 57