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: }