__DATE__ is the build date and __TIME__ is the build time. Values defined in compile time.
This. More precisely, they are the date and time of preprocessing the current translation unit.
What's bad about those macros apart from them being ugly all-upercase? They can be deceptive.
For example, you might expect __FILE__ inside a header to show the header's name. That's "intuitive", but it's not what you get. It shows the name of the translation unit. You might expect "name" to mean "name", not "path", but under GCC it really means "path". Per the standard, it means "presumed name" whatever presumed is supposed to mean. You might expect that __FILE__ is a constant expression, seeing how the standard says it is a literal. It's not, at least not with GCC. Nor is __func__ or __FUNCTION__.
You might expect that __TIME__ is,, well, the time when your executable is built. Or something. It is however the time when a particular translation unit is preprocessed. Which means that __TIME__ may very well be different if it appears twice in two source files. The standard does not guarantee that two instances of __TIME__ within the same translation unit are even the same (they probably are since anything different would be kind of nonsensical, but it's not guaranteed). It is allowable to provide an implementation-defined value, too, if the implementation can't be bothered to determine the current time. Surprise, you didn't see that coming, did you?
__LINE__ is the presumed (whatever that means) line number in the current source file. What's __LINE__ if you use it in an included header? You tell me?