About
A DateTimeData stores a date and a time. Using a ::DateTime structure, it stores the year, month, day, hour, minute and second.
For more specific operation related to time, see TimeValue Manual.
Access
Use C4DAtom::GetParameter() to retrieve the data of a parameter and cast it to DateTimeData.
    
 
    GeData data;
    
 
    
 
    
    const DateTimeData* dateTimeData = data.GetCustomDataType<DateTimeData>();
    
    if (dateTimeData == nullptr)
NONE
Definition: asset_browser.h:1
 
#define DATETIME_DATA
DateTime custom data ID.
Definition: customgui_datetime.h:22
 
#define MAXON_SOURCE_LOCATION
Definition: memoryallocationbase.h:69
 
#define ConstDescID(...)
Definition: lib_description.h:592
 
maxon::Bool Bool
Definition: ge_sys_math.h:46
 
@ SKY_DATE_TIME
Definition: oskyshader.h:54
 
- DateTimeData::GetDateTime().
Retrieves the DateTime from DateTimeData.     
    
    const DateTime timeRetrieved = dateTimeData->GetDateTime();
 
    
 
    
Definition: string.h:1287
 
String DateToString(const DateTime &d)
 
String TimeToString(const DateTime &d, const Bool bShowSeconds=true)
 
#define DiagnosticOutput(formatString,...)
Definition: debugdiagnostics.h:170
 
 
- DateTimeData::SetDateTime().
Allows to set the DateTime to a DateTimeData.     
 
    
    AutoAlloc<DateTimeData> dateTimeData;
    if (dateTimeData == nullptr)
 
    
    DateTime dateTime(1912, 6, 23, 23, 59, 59);
 
    
    dateTimeData->SetDateTime(dateTime);
 
Use C4DAtom::SetParameter() to set the DateTimeData of your parameter.
The custom data type must be specified in the GeData constructor. 
    
    DateTimeData* dt = dat.GetCustomDataTypeWritable<DateTimeData>();
    if (dt)
    {
      dt->SetDateTime(dateTime);
    }
 
    if (!success)
    
@ DEFAULTVALUE
Dummy value for the default value GeData constructor.
Definition: c4d_gedata.h:64
 
Add a parameter in a description
A parameter can be added to a description with the function ::GetDDescription(). To attach a custom GUI to that parameter define DESC_CUSTOMGUI settings and call SetParameter(). See DateTimeControl Manual.
      
 
      if (!singleid || cid.IsPartOf(*singleid, nullptr))
      {
        
        settings.SetString(
DESC_NAME, 
"Date Time"_s);
 
 
        
        
 
        
 
        
 
        
 
        
 
        
          return false;
      }
#define DATETIME_GUI
DateTime custom GUI ID.
Definition: customgui_datetime.h:19
 
#define DATETIME_DATE_CONTROL
::Bool true, if it is a calendar.
Definition: customgui_datetime.h:28
 
#define DATETIME_TIME_CONTROL
::Bool true, if it is a clock.
Definition: customgui_datetime.h:27
 
#define DATETIME_NOW_BUTTON
::Bool true, to add "Now" button.
Definition: customgui_datetime.h:29
 
@ DESC_CUSTOMGUI
Int32 The ID of the GUI for this element. Either a custom ID or one of: CUSTOMGUI
Definition: lib_description.h:124
 
@ DESC_NAME
String Name for standalone use.
Definition: lib_description.h:90
 
@ DESC_SHORT_NAME
String Short name, for attributes dialog.
Definition: lib_description.h:91
 
@ DESC_GUIOPEN
Bool true if the maximized GUI is shown by default.
Definition: lib_description.h:129
 
BaseContainer GetCustomDataTypeDefault(Int32 type)
 
@ ID_OBJECTPROPERTIES
Definition: obase.h:56
 
DateTime Structure
Represents a date and a time.
Inside DateTimeData, DataTime is only accessible via those functions:
- DateTimeData::GetDateTime() Returns a DateTime.
 
- DateTimeData::SetDateTime() Sets the date / time.
 
    
 
    
    DateTime timeSet(1912, 6, 23, 23, 59, 59);
 
    
    AutoAlloc<DateTimeData> dateTimeData;
    if (dateTimeData == nullptr)
 
    
    dateTimeData->SetDateTime(timeSet);
 
    
    const DateTime timeGet = dateTimeData->GetDateTime();
 
  
DateTime Properties
The Structure of the DateTime is composed by those properties.
- DateTime::year.
 
- DateTime::month.
 
- DateTime::day.
 
- DateTime::hour.
 
- DateTime::minute.
 
- DateTime::second.
 
Constructors
A DateTime can be created passing some argument in the constructor as follow:
DateTime (Int32 t_year, Int32 t_month, Int32 t_day, Int32 t_hour, Int32 t_minute, Int32 t_second);
  
  AutoAlloc<DateTimeData> dateTimeData;
  if (dateTimeData == nullptr)
 
  
  DateTimeData* anotherPointer = dateTimeData.Release();
 
 
 
  
  DateTimeData* 
value = data.GetCustomDataTypeWritable<DateTimeData>();
 
 
  
  DateTime dateTime(1912, 6, 23, 23, 59, 59);
 
  
  value->SetDateTime(dateTime);
 
 
  
  DateTimeData::Free(anotherPointer);
 
PyObject * value
Definition: abstract.h:715
 
  
Functionality
There are several functions to manipulate dates and times.
String
DateTime can be converted as a String with:
- FormatTime() Formats the given DateTime t and output it as a string. The format options are the same as strftime(). 
  
  
  const Char* pszFormat = 
"%H:%M:%S - %A - %d / %b / %G";
 
  DiagnosticOutput(
"The DateTime @ in string using  @ format result is @", dateTimeToString, pszFormat, dateTimeString);
 
String FormatTime(const char *pszFormat, const DateTime &t)
 
maxon::Char Char
Definition: ge_sys_math.h:47
 
 
- TimeToString() Converts a time as a formatted string (e.g. "12:34:56").
 
- DateToString() Converts a date as a formatted string. The format of the returned string depends on the current OS date and time settings.
  
  
  DiagnosticOutput(
"The current time @ converted to a string @", dateTimeToString, dateToString);
 
 
- GetMonthName() Retrieves the name of a month in the current Cinema 4D interface language. 
    
 
    
    DateTime now;
  
    
    
    
void GetDateTimeNow(DateTime &t)
 
String GetMonthName(Int month)
 
  DateTime can also be parsed from String to ::Int32 with thoses functions: 
- ParseTimeString() Parses a time string (e.g. "12:34:56").
 
- ParseDateString() Parses a date string (e.g. "31/12/2010"). 
    
 
    
 
int32_t Int32
32 bit signed integer datatype.
Definition: apibase.h:175
 
Bool ParseTimeString(String timestr, Int32 &hour, Int32 &minute, Int32 &second)
 
const char Py_ssize_t const char Py_ssize_t min
Definition: modsupport.h:58
 
time_t * sec
Definition: pytime.h:57
 
 
Julian format
Transforms DateTime to Julian date in both directions.
- GetJulianDay() return the modified Julian date. To get the correct Julian day, take the integer of the value and subtract 0.5.
 
- FromJulianDay() return a DateTime from the modified Julian date. 
  
  const DateTime dateTime = DateTime(2015, 12, 25, 12, 32, 59); 
  
  
  DiagnosticOutput(
"The date  25 December 2015 converted to a julian day is @", julianDay);
 
  
  
  julianDay -= 0.5;
  
  
  
  julianDay += 0.5;
  
 
Float64 Float
Definition: apibase.h:196
 
Float64 GetJulianDay(const DateTime &t)
 
DateTime FromJulianDay(Float64 j)
 
#define FormatString(...)
Definition: string.h:2218
 
   
Current DateTime
Retrieves the current date and time.
- GetDateTimeNow() Retrieves the current system date time and fill the parameter t with it.
 
- GetDateTimeNowGM() Retrieves the current system date time in GMT and fill the parameter t with it.  
 
Convert DateTime
Converts date and time to GMT or local date and time.
- LocalToGMTime() Converts local time to GMT depending on the OS time zone settings. 
- Warning
 - LocalToGMTime will fail if the local date is before Jan 1, 1970 2.01 am or after Jan 18, 2038 7 pm.
 
 
- GMTimeToLocal() Converts GMT time to local depending on the OS time zone settings. 
    
 
    
    DateTime now;
 
    DateTime outGMT;
 
    {
      DiagnosticOutput(
"Local time @ to GMT result is @", localTimeToString, gmtTimeToString);
 
    }
    else
    {
    }
Bool LocalToGMTime(const DateTime &tLocal, DateTime &tGMT)
 
   
Day of week
Gets the day of the week.
- GetDayOfWeek() Gets the day of the week of the date lYear-lMonth-lDay and return ::DAYOFWEEK. 
    
 
    
    const maxon::String days[7] = { 
"Monday"_s, 
"Tuesday"_s, 
"Wednesday"_s, 
"Thursday"_s, 
"Friday"_s, 
"Saturday"_s, 
"Sunday"_s };
 
 
    
    
    
 
DAYOFWEEK GetDayOfWeek(Int32 lYear, Int32 lMonth, Int32 lDay)
 
   
Validate
Tries to correct invalid data.
- ValidateDate() Tries to correct invalid date values, e.g. clamping the values within valid limits. (1700-2299, 1-12, compatible day for the passed month)
 
- ValidateTime() Tries to correct invalid time values, e.g. clamping the values within valid limits. (0h-23h 0-59m 0-59s) 
      
 
      DiagnosticOutput(
"Date before validate @ @ @  and after @ @ @", 2042, 125, 412, year, month, day);
 
 
void ValidateDate(Int32 &year, Int32 &month, Int32 &day)
 
void ValidateTime(Int32 &hour, Int32 &minute, Int32 &second)
 
   
Compare
There are several operators that can be used to compare DateTime.
- DateTime::operator== : return true if the first DateTime is the same as the second.
 
- DateTime::operator != : return true if the first DateTime is not the same as the second.
 
- DateTime::operator<= : return true if the first DateTime is before or equal to the second.
 
- DateTime::operator< : return true if the first DateTime is before the second.
 
- DateTime::operator >= : return true if the first DateTime is after or equal to the second.
 
- DateTime::operator > : return true if the first DateTime is after the second.
 
- ::CompareDateTime (const DateTime &a, const DateTime &b) compare two DateTime and return less than 0 if a < b, equal to 0 if a == b and greater than 0 if a > b. 
  
  const DateTime t1(1976, 04, 02, 18, 55, 22);
  const DateTime t2(2019, 12, 25, 12, 55, 22);
 
  
  
  
  else 
 
PyObject PyObject * result
Definition: abstract.h:43
 
Int32 CompareDateTime(const DateTime &a, const DateTime &b)
 
 
Further Reading