I think this sample code will help you for sure.
CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
EXPORTING
date_external = ls_leaddata-startdate
IMPORTING
date_internal = lv_date
EXCEPTIONS
date_external_is_invalid = 1
OTHERS = 2.
CONVERT DATE lv_date TIME sy-timlo INTO TIME STAMP lv_timestamp TIME ZONE sy-zonlo.
CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
EXPORTING
date_external = ls_leaddata-enddate
IMPORTING
date_internal = lv_date
EXCEPTIONS
date_external_is_invalid = 1
OTHERS = 2.
CONVERT DATE lv_date TIME sy-timlo INTO TIME STAMP lv_timestamp1 TIME ZONE sy-zonlo.
*ls_appointment-ref_handle = 0000000000.
ls_appointment-ref_guid = lv_hguid.
ls_appointment-ref_kind = 'A'.
ls_appointment-appt_type = 'LEAD_END'.
ls_appointment-timestamp_from = lv_timestamp1 ."'20150415220000'. "20150415220000 DOMINANT DURATION RULE_NAME SHOW_LOCAL TIMESTAMP_FROM TIMEZONE_FROM TIME_UNIT
ls_appointment-timezone_from = 'CET' .
ls_appointment-timestamp_to = lv_timestamp1 . "'20150415220000'.
*ls_appointment-mode = 'B'.
APPEND ls_appointment TO lt_appointment.
ls_appointment-ref_guid = lv_hguid.
ls_appointment-ref_kind = 'A'.
ls_appointment-appt_type = 'LEAD_START'.
ls_appointment-timestamp_from = lv_timestamp . "'20150415220000'. "20150415220000 DOMINANT DURATION RULE_NAME SHOW_LOCAL TIMESTAMP_FROM TIMEZONE_FROM TIME_UNIT
ls_appointment-timezone_from = 'CET' .
ls_appointment-timestamp_to = lv_timestamp . "'20150415220000'.
*ls_appointment-mode = 'B'.
APPEND ls_appointment TO lt_appointment.
* LT_NAMETAB
ls_fieldname-fieldname = 'DOMINANT'.
APPEND ls_fieldname TO lt_fieldname.
ls_fieldname-fieldname = 'DURATION'.
APPEND ls_fieldname TO lt_fieldname.
ls_fieldname-fieldname = 'RULE_NAME'.
APPEND ls_fieldname TO lt_fieldname.
ls_fieldname-fieldname = 'SHOW_LOCAL'.
APPEND ls_fieldname TO lt_fieldname.
ls_fieldname-fieldname = 'TIMESTAMP_FROM'.
APPEND ls_fieldname TO lt_fieldname.
ls_fieldname-fieldname = 'TIMEZONE_FROM'.
APPEND ls_fieldname TO lt_fieldname.
ls_fieldname-fieldname = 'TIME_UNIT'.
APPEND ls_fieldname TO lt_fieldname.
ls_input_field-field_names = lt_fieldname.
APPEND ls_input_field TO lt_input_field .
* LT_INPUT_FIELDS
*ls_input_field-ref_handle = 0000000000.
ls_input_field-ref_guid = lv_hguid. "uniq guid 16-bit
ls_input_field-ref_kind = 'A'.
ls_input_field-objectname = 'APPOINTMENT'.
ls_input_field-logical_key = 'LEAD_END'.
ls_input_field-field_names = lt_fieldname.
APPEND ls_input_field TO lt_input_field .
ls_input_field-logical_key = 'LEAD_START'.
APPEND ls_input_field TO lt_input_field .
**********************************************************************************************************************************
After this step call CRM_ORDER_MAINTAIN....
CALL FUNCTION 'CRM_ORDER_MAINTAIN'
EXPORTING
it_lead_h = lt_lead_h
it_orgman = lt_orgman
it_appointment = lt_appointment
it_partner = lt_partner
it_status = lt_status
it_service_os = lt_service_os
* IMPORTING
* ET_EXCEPTION =
CHANGING
ct_orderadm_h = lt_orderadm_h
ct_input_fields = lt_input_field
* CT_PARTNER_ATTRIBUTES =
EXCEPTIONS
error_occurred = 1
document_locked = 2
no_change_allowed = 3
no_authority = 4
OTHERS = 5.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF sy-subrc NE 0.
ENDIF.
CLEAR ls_orderadm_h.
READ TABLE lt_orderadm_h
INTO ls_orderadm_h
INDEX 1.
IF sy-subrc = 0.
ls_object_to_save = ls_orderadm_h-guid.
INSERT ls_object_to_save INTO TABLE lt_object_to_save.
CALL FUNCTION 'CRM_ORDER_SAVE'
EXPORTING
it_objects_to_save = lt_object_to_save
IMPORTING
et_saved_objects = lt_saved_objects
* et_exception = t_exceptions
et_objects_not_saved = lt_objects_not_saved
EXCEPTIONS
document_not_saved = 1
OTHERS = 2.
IF sy-subrc EQ 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'x'
.