Usually you define time of an event in relation to UTC time zone.
If you need to define event on 9:00 o’clock in Alaska you simply need
to subtract 9 hours from event time to get the event time in UTC
(18:00:00). 18 – 9 = 9.
It all works great in December (Alaska is UTC-9), but in May, daylight
saving time is in effect in Alaska (Alaska is UTC-8 then).
If the event is recurring, in May, event is going to be held on 10:00
Alaska time (18 – 8 = 10). Which is most likely not what you want.
As the time zones in different parts of world change way to often to reflect these changes in Mail.dll,
you’ll need to specify the time zone when creating new event (including the daylight savings time).
Here’s the sample:
// C#
using Fluent = Lesnikowski.Mail.Fluent;
using Lesnikowski.Client;
using Lesnikowski.Mail;
using Lesnikowski.Mail.Appointments;
Appointment appointment = new Appointment();
// Create time zone
VTimeZone alaska = appointment.AddTimeZone();
alaska.TimeZoneId = "America/Anchorage";
// Define standard time offset
var standardRecurring = new RecurringRule();
standardRecurring.Frequency = Frequency.Yearly;
standardRecurring.ByDay.Add(Weekday.Sunday);
standardRecurring.ByMonths.Add(11);
var standard = new StandardOffset
{
Name = "AKST",
Start = new DateTime(1970, 11, 01, 02, 00, 00),
OffsetFrom = TimeSpan.FromHours(-8),
OffsetTo = TimeSpan.FromHours(-9),
RecurringRule = standardRecurring
};
// Define daylight time offset
var daylightRecurring = new RecurringRule();
daylightRecurring.Frequency = Frequency.Yearly;
daylightRecurring.ByDay.Add(new Weekday(2, Weekday.Sunday));
daylightRecurring.ByMonths.Add(3);
var daylight = new DaylightOffset
{
Name = "AKDT",
Start = new DateTime(1970, 03, 08, 02, 00, 00),
OffsetFrom = TimeSpan.FromHours(-9),
OffsetTo = TimeSpan.FromHours(-8),
RecurringRule = daylightRecurring
};
alaska.Standard.Add(standard);
alaska.Daylight.Add(daylight);
// Define event
Event e = appointment.AddEvent();
e.Start = new DateTime(2007, 08, 17, 12, 00, 00);
e.End = new DateTime(2007, 08, 17, 12, 30, 00);
e.Summary = "At noon in Alaska";
e.InTimeZone(alaska);
e.SetOrganizer(new Person("Alice", "alice@example.org"));
e.AddParticipant(new Participant(
"Bob", "bob@example.org", ParticipationRole.Required, true));
e.AddParticipant(new Participant(
"Tom", "tom@example.org", ParticipationRole.Optional, true));
e.AddParticipant(new Participant(
"Alice", "alice@example.org", ParticipationRole.Required, true));
Alarm alarm = e.AddAlarm();
alarm.BeforeStart(TimeSpan.FromMinutes(15));
IMail email = Fluent.Mail
.Text("Status meeting at noon in Alaska.")
.Subject("Status meeting")
.From("alice@example.org")
.To("bob@example.org")
.To("tom@example.org")
.AddAppointment(appointment)
.Create();
using (Smtp smtp = new Smtp())
{
smtp.Connect("smtp.example.org"); // or ConnectSSL
smtp.Login("user", "password");
smtp.SendMessage(email);
smtp.Close();
}
' VB.NET
Imports Fluent = Lesnikowski.Mail.Fluent
Imports Lesnikowski.Client
Imports Lesnikowski.Mail
Imports Lesnikowski.Mail.Appointments
Dim appointment As New Appointment()
' Create time zone
Dim alaska As VTimeZone = appointment.AddTimeZone()
alaska.TimeZoneId = "America/Anchorage"
' Define standard time offset
Dim standardRecurring = New RecurringRule()
standardRecurring.Frequency = Frequency.Yearly
standardRecurring.ByDay.Add(Weekday.Sunday)
standardRecurring.ByMonths.Add(11)
Dim standard = New StandardOffset() With { _
.Name = "AKST", _
.Start = New DateTime(1970, 11, 1, 2, 0, 0), _
.OffsetFrom = TimeSpan.FromHours(-8), _
.OffsetTo = TimeSpan.FromHours(-9), _
.RecurringRule = standardRecurring _
}
' Define daylight time offset
Dim daylightRecurring = New RecurringRule()
daylightRecurring.Frequency = Frequency.Yearly
daylightRecurring.ByDay.Add(New Weekday(2, Weekday.Sunday))
daylightRecurring.ByMonths.Add(3)
Dim daylight = New DaylightOffset() With { _
.Name = "AKDT", _
.Start = New DateTime(1970, 3, 8, 2, 0, 0), _
.OffsetFrom = TimeSpan.FromHours(-9), _
.OffsetTo = TimeSpan.FromHours(-8), _
.RecurringRule = daylightRecurring _
}
alaska.Standard.Add(standard)
alaska.Daylight.Add(daylight)
' Define event
Dim e As [Event] = appointment.AddEvent()
e.Start = New DateTime(2007, 8, 17, 12, 0, 0)
e.[End] = New DateTime(2007, 8, 17, 12, 30, 0)
e.Summary = "At noon in Alaska"
e.InTimeZone(alaska)
e.SetOrganizer(New Person("Alice", "alice@example.org"))
e.AddParticipant(New Participant( _
"Bob", "bob@example.org", ParticipationRole.Required, True))
e.AddParticipant(New Participant( _
"Tom", "tom@example.org", ParticipationRole.[Optional], True))
e.AddParticipant(New Participant( _
"Alice", "alice@example.org", ParticipationRole.Required, True))
Dim alarm As Alarm = e.AddAlarm()
alarm.BeforeStart(TimeSpan.FromMinutes(15))
Dim email As IMail = Fluent.Mail _
.Text("Status meeting at noon in Alaska.") _
.Subject("Status meeting") _
.From("alice@example.org") _
.[To]("bob@example.org") _
.[To]("tom@example.org") _
.AddAppointment(appointment) _
.Create()
Using smtp As New Smtp()
smtp.Connect("smtp.example.org") ' or ConnectSSL
smtp.Login("user", "password")
smtp.SendMessage(email)
smtp.Close()
End Using