Zarządzanie spotkaniami: tworzenie i modyfikacja, konwersja z ICS do MSG
Ten artykuł opisuje spotkania iCalendar (ICS) oparte na standardach, obsługiwane przez Appointment klasa. Aby pracować z Outlook MapiCalendar elementy zamiast tego, zobacz Zarządzanie elementami kalendarza Outlook; aby przechowywać i odczytywać elementy kalendarza wewnątrz pliku PST, zobacz Zarządzanie elementami kalendarza w plikach PST.
Utwórz spotkanie i zapisz na dysku w formacie MSG lub ICS
Ten Appointment klasa w Aspose.Email for .NET może być użyta do utworzenia nowego spotkania. W tym artykule najpierw tworzymy spotkanie i zapisujemy je na dysku w formacie ICS. Aby utworzyć spotkanie i zapisać je na dysku, wymagane są następujące kroki.
- Utwórz instancję Appointment klasę i zainicjalizuj ją przy użyciu tego konstruktora.
- Przekaż następujące argumenty do powyższego konstruktora
- Lokalizacja
- Podsumowanie
- Opis
- Data rozpoczęcia
- Data zakończenia
- Organizator
- Uczestnicy
- Wywołaj Save() metodę i określić nazwę pliku oraz format w argumentach.
Spotkanie może być otwarte w Microsoft Outlook lub w dowolnym programie, który potrafi wczytać plik ICS. Jeśli plik zostanie otwarty w Microsoft Outlook, automatycznie dodaje spotkanie do kalendarza Outlook.
Poniższy fragment kodu pokazuje, jak utworzyć i zapisać spotkanie na dysku w formacie ICS lub MSG.
// Create and initialize an instance of the Appointment class
Appointment appointment = new Appointment(
"Meeting Room 3 at Office Headquarters",// Location
"Monthly Meeting", // Summary
"Please confirm your availability.", // Description
new DateTime(2015, 2, 8, 13, 0, 0), // Start date
new DateTime(2015, 2, 8, 14, 0, 0), // End date
"from@domain.com", // Organizer
"attendees@domain.com"); // Attendees
// Save the appointment to disk in ICS format
appointment.Save(fileName + ".ics", new AppointmentIcsSaveOptions());
Console.WriteLine("Appointment created and saved to disk successfully.");
// Save the appointment to disk in MSG format
appointment.Save(fileName + ".msg", new AppointmentMsgSaveOptions());
Console.WriteLine("Appointment created and saved to disk successfully.");
Utwórz spotkanie z zawartością HTML
Możesz określić alternatywne reprezentacje opisu wydarzenia w różnych typach treści przy użyciu nagłówka X-ALT-DESC. Umożliwia to odbiorcom pliku iCalendar wybranie reprezentacji najlepiej spełniającej ich potrzeby. Na przykład możesz dołączyć opis w formacie tekstowym przy użyciu typu "text/plain" oraz opis w HTML przy użyciu typu "text/html". Dla każdej alternatywnej reprezentacji dodawany jest nagłówek X-ALT-DESC. Aby utworzyć spotkanie z treścią HTML, ustaw HtmlDescription właściwość.
Wypróbuj poniższy przykład kodu, aby utworzyć spotkanie z alternatywnym opisem w HTML:
- Utwórz nową instancję klasy Appointment.
- Podaj niezbędne parametry do konstruktora Appointment:
- Określ miejsce spotkania.
- Ustaw datę i godzinę rozpoczęcia.
- Ustaw datę i godzinę zakończenia.
- Określ organizatora.
- Określ uczestnika.
- Ustaw HtmlDescription właściwość obiektu spotkania wskazująca, że opis jest w formacie HTML.
- Ustaw właściwość Description obiektu spotkania na ciąg sformatowany w HTML, zamknięty w wieloliniowym ciągu znaków:
- Znacznik HTML zawiera blok <style> definiujący klasę CSS o nazwie "text" ze stylami czcionki.
- Ciało HTML zawiera znacznik paragrafu <p> z klasą CSS "text" oraz faktyczną treść zaproszenia.
- Obiekt spotkania jest teraz gotowy; możesz wykonać dalsze operacje lub zapisać go jako plik iCalendar.
var appointment = new Appointment("Bygget 83",
DateTime.UtcNow, // start date
DateTime.UtcNow.AddHours(1), // end date
new MailAddress("TintinStrom@from.com", "Tintin Strom"), // organizer
new MailAddress("AinaMartensson@to.com", "Aina Martensson")) // attendee
{
HtmlDescription = @"
<html>
<style type=""text/css"">
.text {
font-family:'Comic Sans MS';
font-size:16px;
}
</style>
<body>
<p class=""text"">Hi, I'm happy to invite you to our party.</p>
</body>
</html>"
};
Utwórz wniosek o wersję roboczą spotkania
W naszych wcześniejszych artykułach pokazaliśmy, jak tworzyć i zapisywać spotkanie w formacie ICS. Często wymaga się utworzenia żądania spotkania w trybie szkicu, aby podstawowe informacje zostały dodane, a następnie szkic został przekazany innym użytkownikom w celu wprowadzenia niezbędnych zmian. Aby zapisać spotkanie w trybie szkicu, MethodType właściwość klasy Appointment powinna być ustawiona na AppointmentMethodType.Publish. Poniższy fragment kodu pokazuje, jak utworzyć wstępne żądanie spotkania.
string sender = "test@gmail.com";
string recipient = "test@email.com";
MailMessage message = new MailMessage(sender, recipient, string.Empty, string.Empty);
Appointment app = new Appointment(string.Empty, DateTime.Now, DateTime.Now, sender, recipient)
{
MethodType = AppointmentMethodType.Publish
};
message.AddAlternateView(app.RequestApointment());
MapiMessage msg = MapiMessage.FromMailMessage(message);
// Save the appointment as draft.
msg.Save(dstDraft);
Console.WriteLine(Environment.NewLine + "Draft saved at " + dstDraft);
Tworzenie wersji roboczej spotkania z tekstu
Poniższy fragment kodu pokazuje, jak utworzyć wersję roboczą spotkania z tekstu.
string ical = @"BEGIN:VCALENDAR
METHOD:PUBLISH
PRODID:-//Aspose Ltd//iCalender Builder (v3.0)//EN
VERSION:2.0
BEGIN:VEVENT
ATTENDEE;CN=test@gmail.com:mailto:test@gmail.com
DTSTART:20130220T171439
DTEND:20130220T174439
DTSTAMP:20130220T161439Z
END:VEVENT
END:VCALENDAR";
string sender = "test@gmail.com";
string recipient = "test@email.com";
MailMessage message = new MailMessage(sender, recipient, string.Empty, string.Empty);
AlternateView av = AlternateView.CreateAlternateViewFromString(ical, new ContentType("text/calendar"));
message.AlternateViews.Add(av);
MapiMessage msg = MapiMessage.FromMailMessage(message);
msg.Save(dataDir + "draft_out.msg");
Dostosowywanie spotkań
Ustaw status uczestników spotkania
API Aspose.Email dla .NET pozwala ustawić status uczestników spotkania podczas tworzenia wiadomości odpowiedzi. Dodaje to właściwość PARTSTAT do pliku ICS.
DateTime startDate = new DateTime(2011, 12, 10, 10, 12, 11),
endDate = new DateTime(2012, 11, 13, 13, 11, 12);
MailAddress organizer = new MailAddress("aaa@amail.com", "Organizer");
MailAddressCollection attendees = new MailAddressCollection();
MailAddress attendee1 = new MailAddress("bbb@bmail.com", "First attendee");
MailAddress attendee2 = new MailAddress("ccc@cmail.com", "Second attendee");
attendee1.ParticipationStatus = ParticipationStatus.Accepted;
attendee2.ParticipationStatus = ParticipationStatus.Declined;
attendees.Add(attendee1);
attendees.Add(attendee2);
Appointment target = new Appointment(location, startDate, endDate, organizer, attendees);
Dostosuj identyfikator produktu dla iCalendar
API Aspose.Email dla .NET umożliwia pobranie lub ustawienie identyfikatora produktu, które utworzyło obiekt iCalendar.
string description = "Test Description";
Appointment app = new Appointment("location", "test appointment", description, DateTime.Today,
DateTime.Today.AddDays(1), "first@test.com", "second@test.com");
AppointmentIcsSaveOptions saveOptions = AppointmentIcsSaveOptions.Default;
saveOptions.ProductId = "Test Corporation";
app.Save(dataDir + "ChangeProdIdOfICS.ics", saveOptions);
Ładowanie spotkań
Ponadto, Appointment klasa może być użyta do wczytania spotkania z pliku ICS.
Załaduj spotkanie w formacie ICS
Aby załadować spotkanie w formacie ICS, wymagane są następujące kroki:
- Utwórz instancję Appointment klasa.
- Wywołaj Load() metoda poprzez podanie ścieżki do pliku ICS.
- Odczytaj dowolną właściwość, aby uzyskać dowolną informację ze spotkania (plik ICS).
Poniższy fragment kodu pokazuje, jak załadować spotkanie w formacie ICS.
// Load an Appointment just created and saved to disk and display its details.
Appointment loadedAppointment = Appointment.Load(dstEmail);
Console.WriteLine(Environment.NewLine + "Loaded Appointment details are as follows:");
// Display the appointment information on screen
Console.WriteLine("Summary: " + loadedAppointment.Summary);
Console.WriteLine("Location: " + loadedAppointment.Location);
Console.WriteLine("Description: " + loadedAppointment.Description);
Console.WriteLine("Start date: " + loadedAppointment.StartDate);
Console.WriteLine("End date: " + loadedAppointment.EndDate);
Console.WriteLine("Organizer: " + loadedAppointment.Organizer);
Console.WriteLine("Attendees: " + loadedAppointment.Attendees);
Console.WriteLine(Environment.NewLine + "Appointment loaded successfully from " + dstEmail);
Konwertuj ICS do MSG
API umożliwia łatwą konwersję spotkania do obiektu wiadomości. Poniższy przykład kodu pokazuje, jak przekształcić żądanie spotkania w MailMessage lub MapiMessage:
var appointment = Appointment.Load("appRequest.ics");
var eml = appointment.ToMailMessage();
var msg = appointment.ToMapiMessage();
Odczyt wielu zdarzeń z pliku ICS
List<Appointment> appointments = new List<Appointment>();
CalendarReader reader = new CalendarReader(dataDir + "US-Holidays.ics");
while (reader.NextEvent())
{
appointments.Add(reader.Current);
}
//working with appointments...
Zapis wielu zdarzeń do pliku ICS
AppointmentIcsSaveOptions saveOptions = new AppointmentIcsSaveOptions();
saveOptions.Action = AppointmentAction.Create;
using (CalendarWriter writer = new CalendarWriter(dataDir + "WriteMultipleEventsToICS_out.ics", saveOptions))
{
for (int i = 0; i < 10; i++)
{
Appointment app = new Appointment(string.Empty, DateTime.Now, DateTime.Now, "sender@domain.com", "receiver@domain.com");
app.Description = "Test body " + i;
app.Summary = "Test summary:" + i;
writer.Write(app);
}
}
Określ wersję spotkania
Aby określić wersję spotkania, możesz użyć Appointment.Version właściwość Appointment klasa. Ta właściwość pomaga określić, na której wersji opierają się ich pliki, zapewniając integrację z innymi systemami i aplikacjami.
Poniższy przykład kodu pokazuje, jak zaimplementować tę właściwość w projekcie:
var app = Appointment.Load("meeting.ics");
// Version is a string that holds the ICS/VCS version, e.g. "2.0" for iCalendar
if (app.Version == "2.0")
{
// do something
}
Wysyłanie i odwoływanie żądań spotkań
Ten Appointment klasy, razem z SmtpClient, może być użyte do wysyłania żądań spotkań, żądań spotkań cyklicznych, aktualizacji i odwołań e‑mailem. Spotkanie jest dodawane do MailMessage jako alternatywny widok.
Wyślij żądanie spotkania
Aby wysłać żądanie spotkania, utwórz Appointment, dodaj ją do wiadomości przy użyciu RequestApointment metodę i wyślij wiadomość. Zapisz identyfikator spotkania UniqueId wartość, aby móc odwołać się do tego samego spotkania później przy wysyłaniu aktualizacji lub odwołania.
// Create an instance of SmtpClient
SmtpClient client = new SmtpClient("smtp.gmail.com", 587, "user@gmail.com", "password");
client.SecurityOptions = SecurityOptions.Auto;
// Gather the attendees
MailAddressCollection attendees = new MailAddressCollection();
attendees.Add(new MailAddress("first.attendee@domain.com", "First Attendee"));
attendees.Add(new MailAddress("second.attendee@domain.com", "Second Attendee"));
// Create the message and the appointment
MailMessage msg = new MailMessage();
msg.From = "organizer@domain.com";
msg.To = attendees;
Appointment app = new Appointment("Meeting Room 1", DateTime.Now, DateTime.Now.AddHours(1), msg.From, attendees);
app.Summary = "Monthly Meeting";
app.Description = "Please confirm your availability.";
// Add the appointment to the message and send it
msg.AddAlternateView(app.RequestApointment());
client.Send(msg);
Wyślij żądanie spotkania z powtarzalnością
Aby utworzyć żądanie spotkania z powtarzalnością, przypisz wzorzec powtarzalności (na przykład WeeklyRecurrencePattern) do Appointment.Recurrence właściwość. Zapisanie unikalnego identyfikatora spotkania umożliwia późniejsze wysyłanie aktualizacji.
// Create a mail message
MailMessage msg1 = new MailMessage();
msg1.To.Add("to@domain.com");
msg1.From = new MailAddress("from@gmail.com");
// Fill the appointment object
DateTime startDate = new DateTime(2013, 12, 1, 17, 0, 0);
DateTime endDate = new DateTime(2013, 12, 31, 17, 30, 0);
Appointment agendaAppointment = new Appointment("same place", startDate, endDate, msg1.From, msg1.To);
// Create a unique id so the appointment can be accessed later
string szUniqueId = Guid.NewGuid().ToString();
agendaAppointment.UniqueId = szUniqueId;
agendaAppointment.Description = "----------------";
// Create a weekly recurrence pattern: Mon, Tue and Thu
WeeklyRecurrencePattern pattern1 = new WeeklyRecurrencePattern(14);
pattern1.StartDays = new CalendarDay[3];
pattern1.StartDays[0] = CalendarDay.Monday;
pattern1.StartDays[1] = CalendarDay.Tuesday;
pattern1.StartDays[2] = CalendarDay.Thursday;
pattern1.Interval = 1;
// Set the recurrence pattern for the appointment
agendaAppointment.Recurrence = pattern1;
// Attach the appointment to the mail
msg1.AlternateViews.Add(agendaAppointment.RequestApointment());
// Send the mail with the appointment request
SmtpClient client = new SmtpClient("smtp.gmail.com", 587, "your.email@gmail.com", "your.password");
client.SecurityOptions = SecurityOptions.Auto;
client.Send(msg1);
Wyślij żądanie aktualizacji spotkania
Aby wysłać aktualizację wcześniej wysłanego spotkania, wymagany jest unikalny identyfikator spotkania. Użyj UpdateAppointment metodę, aby zbudować alternatywny widok aktualizacji.
static public void SendUpdate(string szUniqueId)
{
DateTime startDate = new DateTime(2013, 12, 12, 17, 0, 0);
DateTime endDate = new DateTime(2013, 12, 12, 17, 30, 0);
Appointment appUpdate = new Appointment("Different Place", startDate, endDate,
"organizer@gmail.com", "attendee@domain.com");
appUpdate.UniqueId = szUniqueId;
appUpdate.Summary = "update meeting request summary";
appUpdate.Description = "update";
MailMessage msgUpdate = new MailMessage("organizer@gmail.com", "attendee@domain.com",
"test email - update meeting request", "test email");
msgUpdate.AddAlternateView(appUpdate.UpdateAppointment());
SmtpClient smtp = new SmtpClient("server.domain.com", 587, "username", "password");
smtp.Send(msgUpdate);
}
Odwołaj żądanie spotkania
Aby odwołać spotkanie, zbuduj taki sam Appointment (korzystając z informacji zapisanej przy wysyłaniu żądania), dodaj ją do wiadomości za pomocą CancelAppointment metodę i wyślij wiadomość do uczestników.
// Re-create the attendee collection and the appointment from your stored data
MailAddressCollection attendees = new MailAddressCollection();
attendees.Add(new MailAddress("first.attendee@domain.com", "First Attendee"));
attendees.Add(new MailAddress("second.attendee@domain.com", "Second Attendee"));
Appointment app = new Appointment("Meeting Room 1", "Monthly Meeting", "Please confirm your availability.",
DateTime.Now, DateTime.Now.AddHours(1),
new MailAddress("organizer@domain.com", "Organizer"), attendees);
// Create the cancellation message
MailMessage msg = new MailMessage();
msg.From = new MailAddress("organizer@domain.com", "");
msg.To = attendees;
msg.Subject = "Cancel meeting";
msg.AddAlternateView(app.CancelAppointment());
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587, "user@gmail.com", "password");
smtp.Send(msg);
Praca z wzorcami powtarzalności iCalendar
Wzorzec powtarzalności to sposób opisania konkretnego harmonogramu. Zawiera on wystarczającą ilość informacji, aby utworzyć listę wystąpień (dat i godzin) zgodnie z podanym harmonogramem. Wzorzec powtarzalności może zawierać reguły powtarzalności opisujące cykle łączące się w ogólny wzorzec. Generalnie, im bardziej złożony wzorzec, tym więcej reguł powtarzalności będzie zawierał.
Wzorce powtarzalności mogą zawierać wyjątki (nie mylić z wyjątkami oznaczającymi błędy podczas wykonywania aplikacji). Wyjątki dodają lub usuwają daty wystąpień względem pierwotnego wzorca. Mogą być określone jako jawne wystąpienia lub jako samodzielny wzorzec. Przykłady wzorców powtarzalności z wyjątkami:
- Co drugi piątek, z wyjątkiem od czerwca do sierpnia.
- Pierwszy dzień każdego miesiąca, z wyjątkiem stycznia, kiedy powinien być 2.
Standard iCalendar RFC definiuje komponenty, takie jak VEVENT czy VTODO, które reprezentują zdarzenia lub zadania. Komponenty mogą mieć właściwości takie jak data/godzina rozpoczęcia, opis, lokalizacja, uczestnicy i powtarzalność. Wzorzec powtarzalności zwykle istnieje jako właściwość powtarzalnego zadania lub wydarzenia. Właściwości wzorca powtarzalności określone w iCalendar to:
- DTSTART – data i godzina rozpoczęcia wzorca (również reprezentuje pierwsze wystąpienie, jeśli nie zostanie wykluczone explicite).
- RRULE – określa regułę powtarzania dla zestawu powtarzalności.
- RDATE – definiuje listę dat i godzin do uwzględnienia w zestawie powtarzalności.
- EXRULE – określa regułę powtarzania dla wyjątków z zestawu powtarzalności.
- EXDATE – definiuje listę wyjątków dat i godzin z zestawu powtarzalności.
Jedynie DTSTART jest wymagany i musi występować tylko raz. Wszystkie pozostałe właściwości są opcjonalne i mogą być podawane wielokrotnie.
Model obiektowy powtarzalności Aspose.Email
Ten Aspose.Email.Calendar.Recurrences przestrzeń nazw zawiera klasy używane do pracy z powtarzalnościami iCalendar. CalendarRecurrence i RecurrenceRule są centralnymi klasami i zapewniają konkretne implementacje odpowiadających elementów RFC 2445.
- Ten
CalendarRecurrenceklasa reprezentuje cały wzorzec powtarzalności. Możesz utworzyć nowy wzorzec od podstaw, używając domyślnego konstruktora, lub wczytać istniejący wzorzec w formacie iCalendar przy pomocy statycznegoFromiCalendarmetoda. - Ten
RecurrenceRuleklasa reprezentuje część RRULE lub EXRULE wzorca powtarzania.RecurrenceRuleujawnia szereg właściwości, które bezpośrednio mapują się na ich odpowiedniki w standardzie iCalendar. Na przykład,ByMonthodwzorowuje BYMONTH w iCalendar i tak dalej. Analizując lub ustawiając wartościRecurrenceRulewłaściwości, możesz analizować lub modyfikować regułę powtarzalności.
Poniższy fragment kodu wczytuje wzorzec powtarzalności (gdzie część RRULE zawiera regułę powtarzalności) i generuje wystąpienia:
// Ten team meetings, every Monday at 10am.
CalendarRecurrence pattern = new CalendarRecurrence("DTSTART:20040301T100000\n" + "RRULE:FREQ=WEEKLY;COUNT=10;BYDAY=MO");
DateCollection dates = pattern.GenerateOccurrences();
Generuj wystąpienia ze wzorca powtarzalności
Z Aspose.Email można generować wystąpienia ze wzorca powtarzalności. Aby uzyskać „następne” wystąpienie, użyj GenerateOccurrences metody z parametrem nNextOccurrences = 1. Poniższy fragment kodu generuje 20 wystąpień przy użyciu GenerateOccurrences(20).
CalendarRecurrence recurrencePattern = new CalendarRecurrence();
recurrencePattern.StartDate = new DateTime(1997, 9, 10, 9, 0, 0);
RecurrenceRule rule = recurrencePattern.RRules.Add();
rule.Frequency = Frequency.Monthly;
rule.Count = 20;
rule.Interval = 18;
rule.ByMonthDay.Add(new int[] { 10, 11, 12, 13, 14, 15 });
DateCollection expectedDates = recurrencePattern.GenerateOccurrences(20);
Console.WriteLine("expectedDates.Count = " + expectedDates.Count);
foreach (DateTime date in expectedDates)
{
Console.WriteLine("DateTime = " + date);
}
Uzyskaj przyjazny tekst dla powtarzalności
Tekst przyjazny dla użytkownika dla reguły można uzyskać za pomocą FriendlyText właściwość. Wynik następującego kodu to: "Powtarzaj co miesiąc w dniu 1 i 1 od końca miesiąca maksymalnie 2 wystąpienia."
RecurrenceRule rule = new RecurrenceRule();
rule.Frequency = Frequency.Monthly;
rule.Count = 2;
rule.ByMonthDay.Add(1);
rule.ByMonthDay.Add(-1);
Console.WriteLine(rule.FriendlyText);
Przykładowe wzorce powtarzalności
Poniższe przykładowe ciągi RRULE ilustrują, jak wyrazić typowe harmonogramy.
-
Ostatni dzień miesiąca, każdy miesiąc. Jeśli chcesz uzyskać wystąpienie w dniu przedostatnim, użyj
BYMONTHDAY=-2. Jeśli określiszBYMONTHDAY=31, wtedy zgodnie ze standardem iCalendar nie generuje się wystąpienia w miesiącach mających mniej niż 31 dni.RRULE:FREQ=MONTHLY;BYMONTHDAY=-1 -
Ostatni dzień roboczy każdego miesiąca. Reguła ta określa wszystkie dni robocze miesiąca i wybiera ostatni z nich. Wynikiem jest ostatni dzień roboczy w miesiącu.
RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1 -
Ostatni poniedziałek roku.
RRULE:FREQ=YEARLY;BYDAY=-1MO -
Piątek pierwszego tygodnia ISO 8601 roku. W specyfikacji ISO 8601 pierwszy tydzień roku to pierwszy, który ma co najmniej cztery dni.
FREQ=YEARLY;BYWEEKNO=1;BYDAY=FR -
Pierwszy piątek roku. W 1999 r. pierwszym piątkiem roku jest 1999/01/01, natomiast piątek pierwszego tygodnia ISO 8601 wypada 1999/01/08.
FREQ=YEARLY;BYDAY=1FR
Ważne szczegóły iCalendar (RFC 2445)
Daty lub daty z powiązanymi czasami mogą być używane w elementach DTSTART, UNTIL, EXDATE i RDATE przy określaniu wzorca powtarzalności. iCalendar definiuje typ wartości DATE, aby oznaczyć wartości zawierające datę kalendarzową, oraz typ DATE‑TIME, aby określić dokładną datę i godzinę. Wartości DATE‑TIME mogą być podawane w trzech formach: czas lokalny, czas UTC oraz czas lokalny ze strefą czasową.
- DATE. Zgodnie ze standardem iCalendar, wartości DATE muszą spełniać
yyyyMMddformat. Na przykład,19970714reprezentuje 14 lipca 1997. - DATE‑TIME z czasem lokalnym. Forma daty‑czasu lokalnego to po prostu wartość daty‑czasu, która nie zawiera oznaczenia UTC i nie odwołuje się do strefy czasowej. Na przykład,
DTSTART:19980118T230000reprezentuje 18 stycznia 1998, godz. 23:00. Wartości daty‑czasu tego typu są określane jako „pływające” i nie są powiązane z żadną konkretną strefą czasową. Reprezentują tę samą godzinę, minutę i sekundę niezależnie od aktualnie obowiązującej strefy czasowej. - DATE‑TIME w czasie UTC. Data z czasem UTC (czas absolutny) jest oznaczona wielką literą
Zdołączony do wartości czasu. Na przykład,DTSTART:19980119T070000Zreprezentuje 19 stycznia 1998, godz. 07:00 UTC. Należy zauważyć, że Aspose.Email ignoruje przyrostek UTCZprzyrostek i traktuje czas jako lokalny. Standard RFC 2445 stwierdza, że część czasu podana w regule UNTIL wzorca powtarzalności musi być w formacie UTC; Aspose.Email akceptuje czas w dowolnym formacie w regule UNTIL. - DATE‑TIME z czasem lokalnym i strefą czasową. Aby odwołać się do strefy czasowej, DATE‑TIME jest modyfikowane właściwością TZID. Na przykład,
DTSTART;TZID=US-Eastern:19980119T020000reprezentuje godzinę 2:00 w Nowym Jorku 19 stycznia 1998. Należy zauważyć, że Aspose.Email obecnie ignoruje parametr TZID i traktuje czas jako czas lokalny. - Zgodność BYWEEKNO i ISO 8601. Używaj BYWEEKNO tylko wtedy, gdy wymagana jest ISO 8601 jest wymagane. Numery tygodni zgodnie z ISO 8601 różnią się od zwykłych numerów tygodni: pierwszy tydzień roku kalendarzowego to pierwszy tydzień, który zawiera co najmniej cztery dni. Reguła BYWEEKNO określa listę liczb oddzielonych przecinkiem identyfikujących tygodnie roku (wartości od 1 do 53 i od -1 do -53) i jest ważna tylko dla reguł YEARLY.
Zobacz także
- Zarządzanie elementami kalendarza Outlook — tworzyć i zarządzać elementami kalendarza jako Outlook
MapiCalendar(MSG) obiekty. - Zarządzanie elementami kalendarza w plikach PST — przechowywać i odczytywać elementy kalendarza wewnątrz pliku PST.