xref: /petsc/src/sys/time/fdate.c (revision c8025a5415d73fd1c6005393f2b0e60677bf5915)
1c6db04a5SJed Brown #include <petscsys.h>
2e5c89e4eSSatish Balay #if defined(PETSC_HAVE_SYS_TIME_H)
3e5c89e4eSSatish Balay   #include <sys/time.h>
4e5c89e4eSSatish Balay #endif
5e5c89e4eSSatish Balay #include <time.h>
6e5c89e4eSSatish Balay #if defined(PETSC_NEEDS_GETTIMEOFDAY_PROTO)
78cc058d9SJed Brown PETSC_EXTERN int gettimeofday(struct timeval *, struct timezone *);
8e5c89e4eSSatish Balay #endif
9e5c89e4eSSatish Balay 
10e5c89e4eSSatish Balay /*@C
11e5c89e4eSSatish Balay   PetscGetDate - Gets the current date.
12e5c89e4eSSatish Balay 
1320f4b53cSBarry Smith   Not Collective
14e5c89e4eSSatish Balay 
15e5c89e4eSSatish Balay   Input Parameter:
16e5c89e4eSSatish Balay . len - length of string to hold date
17e5c89e4eSSatish Balay 
18e5c89e4eSSatish Balay   Output Parameter:
19e5c89e4eSSatish Balay . date - the date
20e5c89e4eSSatish Balay 
21e5c89e4eSSatish Balay   Level: beginner
22e5c89e4eSSatish Balay 
23811af0c4SBarry Smith   Note:
24811af0c4SBarry Smith   This function makes a system call and thus SHOULD NOT be called from an error handler.
25811af0c4SBarry Smith 
26aec76313SJacob Faibussowitsch   Developer Notes:
27811af0c4SBarry Smith   This function is called once during `PetscInitialize()`.
28811af0c4SBarry Smith   It stashes the timestamp, and uses it when needed. This is so that
29811af0c4SBarry Smith   error handlers may report the date without generating possible
30811af0c4SBarry Smith   additional system errors during the call to get the date.
31e5c89e4eSSatish Balay 
3210450e9eSJacob Faibussowitsch .seealso: `PetscGetHostName()`
33e5c89e4eSSatish Balay @*/
34d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscGetDate(char date[], size_t len)
35d71ae5a4SJacob Faibussowitsch {
360298fd71SBarry Smith   char *str = NULL;
37e5c89e4eSSatish Balay #if defined(PETSC_HAVE_TIME)
38e5c89e4eSSatish Balay   time_t aclock;
39e5c89e4eSSatish Balay #else
40e5c89e4eSSatish Balay   struct timeval tp;
41e5c89e4eSSatish Balay #endif
42e5c89e4eSSatish Balay 
43e5c89e4eSSatish Balay   PetscFunctionBegin;
44e5c89e4eSSatish Balay #if defined(PETSC_HAVE_TIME)
45e5c89e4eSSatish Balay   time(&aclock);
469566063dSJacob Faibussowitsch   PetscCall(PetscStrncpy(date, asctime(localtime(&aclock)), len));
47e5c89e4eSSatish Balay #else
48*c8025a54SPierre Jolivet   gettimeofday(&tp, NULL);
499566063dSJacob Faibussowitsch   PetscCall(PetscStrncpy(date, asctime(localtime((time_t *)&tp.tv_sec)), len));
50e5c89e4eSSatish Balay #endif
51e5c89e4eSSatish Balay   /* now strip out the new-line chars at the end of the string */
529566063dSJacob Faibussowitsch   PetscCall(PetscStrstr(date, "\n", &str));
53e5c89e4eSSatish Balay   if (str) str[0] = 0;
543ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
55e5c89e4eSSatish Balay }
56