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