In the all calendar item start time, end time, recurrence time 5hour 30 min is added extra for these field

An extra 5 hours and 30 minutes is being added to the start time, end time, and recurrence time of all calendar items. I want to set the exact date and time passed to the calendar object, without any additional time.

MapiCalendar appointment = new MapiCalendar();
if (!string.IsNullOrEmpty(appointmentFields.Subject1))
{
appointment.Subject = appointmentFields.Subject1;
sub = appointmentFields.Subject1;
}
if (!string.IsNullOrEmpty(appointmentFields.Start))
{
DateTime StartdateTime = DateTime.ParseExact(appointmentFields.Start, “ddd, dd MMM yyyy HH:mm:ss”, CultureInfo.InvariantCulture);
appointment.StartDate = StartdateTime;
}

if (!string.IsNullOrEmpty(appointmentFields.End))
{
DateTime EnddateTime = DateTime.ParseExact(appointmentFields.End, “ddd, dd MMM yyyy HH:mm:ss”, CultureInfo.InvariantCulture);
appointment.EndDate = EnddateTime;
}

@kumarpiyush01,

This one is expected behaviour, not a bug.
MapiCalendar.StartDate and EndDate are UTC values.

Aspose.Email doesn’t convert what you assign: it stores the DateTime as-is and marks it as UTC, regardless of its Kind.

input 04-08-2026 10:00:00, Kind=Unspecified  ->  stored 04-08-2026 10:00:00 UTC
input 04-08-2026 10:00:00, Kind=Local        ->  stored 04-08-2026 10:00:00 UTC
input 04-08-2026 10:00:00, Kind=Utc          ->  stored 04-08-2026 10:00:00 UTC

DateTime.ParseExact with "ddd, dd MMM yyyy HH:mm:ss" returns Kind = Unspecified, so your IST time 10:00 is stored as 10:00 UTC. Outlook then converts UTC to your local zone for display and shows 15:30 - the +5:30 you are seeing.
Recurrence times follow the same rule; there is no separate issue there.

Fix: convert to UTC before assigning:

var ist = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");

var start = DateTime.ParseExact(appointmentFields.Start,
    "ddd, dd MMM yyyy HH:mm:ss", CultureInfo.InvariantCulture);   // Kind = Unspecified
appointment.StartDate = TimeZoneInfo.ConvertTimeToUtc(start, ist);

var end = DateTime.ParseExact(appointmentFields.End,
    "ddd, dd MMM yyyy HH:mm:ss", CultureInfo.InvariantCulture);
appointment.EndDate = TimeZoneInfo.ConvertTimeToUtc(end, ist);

If the input is always in the machine’s own time zone, DateTime.SpecifyKind(start, DateTimeKind.Local).ToUniversalTime() is enough.

Result:

wall clock (IST) = 04-08-2026 10:00:00
stored StartDate = 04-08-2026 04:30:00 UTC
shown in Outlook = 04-08-2026 10:00:00 IST

Optionally, record the appointment’s time zone so that Outlook knows it explicitly, this doesn’t change the displayed time, but it matters for expanding recurrences across DST transitions:

appointment.StartDateTimeZone = new MapiCalendarTimeZone(ist);
appointment.EndDateTimeZone   = new MapiCalendarTimeZone(ist);

One more note: your format string has no UTC offset in it. If the source values actually carry one (e.g. Tue, 04 Aug 2026 10:00:00 +0530), it is silently discarded, parsing into DateTimeOffset and using .UtcDateTime would be more robust.