Kelola Janji: Buat & Manipulasi, Konversi ICS ke MSG

Artikel ini membahas janji iCalendar (ICS) berbasis standar yang ditangani melalui Appointment kelas. Untuk bekerja dengan Outlook MapiCalendar item sebagai gantinya, lihat Mengelola Item Kalender Outlook; untuk menyimpan dan membaca item kalender di dalam PST, lihat Mengelola Item Kalender dalam File PST.

Buat Janji dan Simpan ke Disk dalam Format MSG atau ICS

The Appointment kelas di Aspose.Email untuk .NET dapat digunakan untuk membuat janji baru. Pada artikel ini, kami pertama-tama membuat janji dan menyimpannya ke disk dalam format ICS. Langkah-langkah berikut diperlukan untuk membuat janji dan menyimpannya ke disk.

  1. Buat sebuah instansi dari Appointment kelas dan inisialisasi dengan konstruktor ini.
  2. Berikan argumen berikut dalam konstruktor di atas
    1. Lokasi
    2. Ringkasan
    3. Deskripsi
    4. Tanggal Mulai
    5. Tanggal Selesai
    6. Penyelenggara
    7. Peserta
  3. Panggil Save() metode dan tentukan nama file serta format dalam argumen.

Janji dapat dibuka di Microsoft Outlook atau program apa pun yang dapat memuat file ICS. Jika file dibuka di Microsoft Outlook, secara otomatis menambahkan janji ke kalender Outlook.

Potongan kode berikut menunjukkan cara membuat dan menyimpan sebuah janji ke disk dalam format ICS atau 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.");

Buat Janji dengan Konten HTML

Anda dapat menentukan representasi alternatif deskripsi acara dalam tipe konten yang berbeda menggunakan header X-ALT-DESC. Ini memungkinkan penerima file iCalendar memilih representasi yang paling sesuai dengan kebutuhan mereka. Misalnya, Anda dapat menyertakan deskripsi teks biasa menggunakan tipe konten "text/plain" dan deskripsi HTML menggunakan tipe konten "text/html". Header X-ALT-DESC ditambahkan untuk setiap representasi alternatif. Untuk membuat janji dengan konten HTML, atur HtmlDescription properti.

Coba contoh kode berikut untuk membuat janji dengan deskripsi HTML alternatif:

  1. Buat instance baru dari kelas Appointment.
  2. Berikan parameter yang diperlukan ke konstruktor Appointment:
    • Tentukan lokasi janji.
    • Atur tanggal dan waktu mulai.
    • Atur tanggal dan waktu akhir.
    • Tentukan penyelenggara.
    • Tentukan peserta.
  3. Setel HtmlDescription properti dari objek janji, menunjukkan bahwa deskripsi dalam format HTML.
  4. Set properti Description dari objek janji ke string berformat HTML, terbungkus dalam string multiline:
    • Markup HTML menyertakan blok <style> yang mendefinisikan kelas CSS bernama "text" dengan gaya font.
    • Badan HTML berisi tag paragraf <p> dengan kelas CSS "text", dan pesan undangan sebenarnya.
  5. Objek janji sekarang siap, dan Anda dapat melakukan operasi lebih lanjut atau menyimpannya sebagai file 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>"
};

Buat Permintaan Janji Draf

Telah ditunjukkan dalam artikel-artikel kami sebelumnya cara membuat dan menyimpan sebuah janji dalam format ICS. Sering kali diperlukan untuk membuat permintaan Janji dalam mode Draft, sehingga informasi dasar ditambahkan dan kemudian Draft Janji yang sama dapat diteruskan ke pengguna lain untuk perubahan yang diperlukan sesuai kebutuhan individu. Untuk menyimpan sebuah Janji dalam mode Draft, MethodType properti kelas Appointment harus diset ke AppointmentMethodType.Publish. Potongan kode berikut menunjukkan cara membuat permintaan janji draft.

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);

Pembuatan Janji Draf dari Teks

Kode potongan berikut menunjukkan cara membuat janji temu draft dari Teks. 

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");

Sesuaikan Janji

Atur Status Peserta pada Peserta Janji

API Aspose.Email untuk .NET memungkinkan Anda mengatur status peserta janji saat menyusun pesan balasan. Ini menambahkan properti PARTSTAT ke file 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);

Sesuaikan Identifier Produk untuk ICalendar

API Aspose.Email untuk .NET memungkinkan mengambil atau mengatur pengidentifikasi produk yang membuat objek 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);

Memuat Janji

Juga,  Appointment kelas dapat digunakan untuk memuat sebuah janji dari file ICS.

Muat Janji dalam Format ICS

Untuk memuat janji dalam format ICS, langkah-langkah berikut diperlukan:

  1. Buat sebuah instansi dari Appointment kelas.
  2. Panggil Load() metode dengan memberikan jalur file ICS.
  3. Baca properti apa pun untuk mendapatkan informasi apa pun dari janji temu (file ICS).

Potongan kode berikut menunjukkan cara memuat sebuah janji dalam format 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);

Konversi ICS ke MSG

API memungkinkan Anda dengan mudah mengonversi sebuah Appointment menjadi objek pesan. Contoh kode berikut menunjukkan cara mengonversi permintaan janji menjadi MailMessage atau MapiMessage:

var appointment = Appointment.Load("appRequest.ics");

var eml = appointment.ToMailMessage();
var msg = appointment.ToMapiMessage();

Baca Beberapa Acara dari File 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...

Tuliskan Beberapa Peristiwa ke File 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);
    }
}

Menentukan Versi Janji

Untuk menentukan versi dari sebuah janji, Anda dapat menggunakan Appointment.Version properti dari Appointment kelas. Properti ini membantu menentukan versi apa yang menjadi dasar file mereka, memastikan integrasi dengan sistem dan aplikasi lain.

Contoh kode berikut menunjukkan cara mengimplementasikan properti ini dalam proyek Anda:

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
}

Mengirim dan Membatalkan Permintaan Rapat

The Appointment kelas, bersama dengan SmtpClient, dapat digunakan untuk mengirim permintaan rapat, permintaan rapat berulang, pembaruan, dan pembatalan melalui email. Janji tersebut ditambahkan ke sebuah MailMessage sebagai tampilan alternatif.

Kirim Permintaan Rapat

Untuk mengirim permintaan rapat, buat sebuah Appointment, tambahkan ke pesan menggunakan RequestApointment metode, dan kirim pesan. Simpan UniqueId nilai sehingga Anda dapat merujuk janji yang sama nanti saat mengirim pembaruan atau pembatalan.

// 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);

Kirim Permintaan Rapat Berulang

Untuk membuat permintaan rapat dengan pengulangan, tetapkan pola pengulangan (misalnya, sebuah WeeklyRecurrencePattern) ke Appointment.Recurrence properti. Menyimpan ID unik janji memungkinkan pengiriman pembaruan ke janji tersebut di kemudian hari.

// 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);

Kirim Permintaan Pembaruan Janji

Untuk mengirim pembaruan pada janji yang sudah dikirim sebelumnya, ID unik janji diperlukan. Gunakan UpdateAppointment metode untuk membangun tampilan alternatif pembaruan.

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);
}

Batalkan Permintaan Rapat

Untuk membatalkan rapat, buatlah Appointment (menggunakan informasi yang Anda simpan saat permintaan dikirim), tambahkan ke pesan dengan CancelAppointment metode, dan kirim pesan ke peserta.

// 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);

Bekerja dengan Pola Pengulangan iCalendar

Sebuah pola pengulangan adalah cara untuk mendeskripsikan jadwal tertentu. Ia berisi informasi cukup untuk membangun daftar kejadian (tanggal dan waktu) sesuai jadwal yang diberikan. Pola pengulangan dapat berisi aturan pengulangan yang menggambarkan siklus yang digabungkan menjadi pola keseluruhan. Secara umum, semakin kompleks pola pengulangan, semakin banyak aturan pengulangan yang akan dimilikinya.

Pola pengulangan dapat mencakup pengecualian (bukan pengecualian yang merepresentasikan error selama eksekusi aplikasi). Pengecualian menambah atau menghapus tanggal kejadian relatif terhadap pola asli. Mereka dapat ditentukan sebagai kejadian eksplisit atau sebagai pola itu sendiri. Contoh pola pengulangan dengan pengecualian:

  • Setiap Jumat kedua, kecuali dari Juni hingga Agustus.
  • Hari pertama setiap bulan, kecuali Januari, yang harus pada hari ke‑2.

RFC iCalendar mendefinisikan komponen, seperti VEVENT atau VTODO, yang mewakili acara atau tugas. Komponen dapat memiliki properti seperti tanggal/waktu mulai, deskripsi, lokasi, peserta, dan pengulangan. Pola pengulangan biasanya menjadi properti dari tugas atau acara berulang. Properti pola pengulangan yang didefinisikan oleh iCalendar adalah:

  • DTSTART – tanggal dan waktu mulai pola (juga mewakili kejadian pertama jika tidak dikecualikan secara eksplisit).
  • RRULE – menentukan aturan berulang untuk satu set pengulangan.
  • RDATE – mendefinisikan daftar tanggal dan waktu yang termasuk dalam satu set pengulangan.
  • EXRULE – menentukan aturan berulang untuk pengecualian dari satu set pengulangan.
  • EXDATE – mendefinisikan daftar pengecualian tanggal dan waktu dari satu set pengulangan.

Hanya DTSTART yang diperlukan, dan hanya boleh ada satu DTSTART. Semua properti lain opsional dan dapat ditentukan lebih dari satu kali.

Model Objek Pengulangan Aspose.Email

The Aspose.Email.Calendar.Recurrences namespace berisi kelas-kelas yang digunakan untuk bekerja dengan pengulangan iCalendar. CalendarRecurrence dan RecurrenceRule adalah kelas pusat, dan menyediakan implementasi konkret elemen RFC 2445 yang bersesuaian.

  • The CalendarRecurrence kelas mewakili seluruh pola pengulangan. Anda dapat membuat pola pengulangan baru dari awal menggunakan konstruktor default, atau memuat pola yang ada dalam format iCalendar menggunakan static FromiCalendar metode.
  • The RecurrenceRule kelas mewakili bagian RRULE atau EXRULE dari pola pengulangan. RecurrenceRule menyediakan sejumlah properti yang langsung memetakan ke padanan mereka dalam standar iCalendar. Misalnya, ByMonth memetakan ke BYMONTH dalam iCalendar, dan seterusnya. Dengan memeriksa atau mengatur nilai-nilai dari RecurrenceRule properti, Anda dapat menganalisis atau memodifikasi aturan pengulangan.

Potongan kode berikut memuat pola pengulangan (di mana bagian RRULE berisi aturan pengulangan) dan menghasilkan kejadian:

// 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();

Hasilkan Kejadian dari Pola Pengulangan

Dengan Aspose.Email memungkinkan menghasilkan kejadian dari pola pengulangan. Untuk mendapatkan kejadian "berikutnya", gunakan GenerateOccurrences metode dengan parameter nNextOccurrences = 1. Potongan kode berikut menghasilkan 20 kejadian dengan menggunakan 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);
}

Dapatkan Teks Ramah Pengguna untuk Pengulangan

Teks ramah pengguna untuk sebuah aturan dapat diperoleh menggunakan FriendlyText properti. Output kode berikut adalah: "Berulang setiap bulan pada hari ke-1 dan ke-1 dari akhir hari dalam bulan untuk maksimal 2 kejadian."

RecurrenceRule rule = new RecurrenceRule();
rule.Frequency = Frequency.Monthly;
rule.Count = 2;
rule.ByMonthDay.Add(1);
rule.ByMonthDay.Add(-1);
Console.WriteLine(rule.FriendlyText);

Contoh Pola Pengulangan

String RRULE contoh berikut mengilustrasikan cara mengekspresikan jadwal umum.

  • Hari terakhir bulan, setiap bulan. Jika Anda menginginkan kejadian pada hari sebelum hari terakhir bulan, gunakan BYMONTHDAY=-2. Jika Anda menentukan BYMONTHDAY=31, maka menurut standar iCalendar, tidak ada kejadian yang dihasilkan pada bulan yang memiliki kurang dari 31 hari.

    RRULE:FREQ=MONTHLY;BYMONTHDAY=-1
    
  • Hari kerja terakhir setiap bulan. Aturan ini menentukan semua hari kerja dalam sebulan dan memilih yang terakhir. Hasilnya adalah hari kerja terakhir dalam bulan.

    RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1
    
  • Senin Terakhir Tahun Ini.

    RRULE:FREQ=YEARLY;BYDAY=-1MO
    
  • Jumat minggu ISO 8601 pertama tahun ini. Dalam spesifikasi ISO 8601, minggu pertama tahun adalah minggu pertama yang memiliki setidaknya empat hari.

    FREQ=YEARLY;BYWEEKNO=1;BYDAY=FR
    
  • Jumat Pertama Tahun Ini. Pada 1999, misalnya, Jumat pertama tahun tersebut adalah 1999/01/01, sementara Jumat minggu ISO 8601 pertama adalah 1999/01/08.

    FREQ=YEARLY;BYDAY=1FR
    

Detail Penting iCalendar (RFC 2445)

Tanggal, atau tanggal dengan waktu terkait, dapat digunakan dalam elemen DTSTART, UNTIL, EXDATE, dan RDATE ketika menentukan pola berulang. iCalendar mendefinisikan tipe nilai DATE untuk mengidentifikasi nilai yang berisi tanggal kalender, dan tipe DATE-TIME untuk mengidentifikasi nilai yang menentukan tanggal kalender tepat dan waktu hari. Nilai DATE-TIME dapat ditentukan dalam tiga bentuk: waktu lokal, waktu UTC, dan waktu lokal dengan zona waktu.

  • DATE. Menurut standar iCalendar, nilai DATE harus mengikuti yyyyMMdd format. Misalnya, 19970714 mewakili 14 Juli 1997.
  • DATE-TIME dengan waktu lokal. Bentuk tanggal dengan waktu lokal hanyalah nilai date-time yang tidak mengandung penunjuk UTC dan tidak merujuk zona waktu. Misalnya, DTSTART:19980118T230000 mewakili 18 Januari 1998, pukul 23.00. Nilai date-time jenis ini disebut "floating" dan tidak terikat pada zona waktu tertentu. Mereka mewakili nilai jam, menit, dan detik yang sama terlepas dari zona waktu yang sedang dipakai.
  • DATE-TIME dengan waktu UTC. Tanggal dengan waktu UTC (waktu absolut) diidentifikasi dengan huruf kapital Z yang ditambahkan ke nilai waktu. Misalnya, DTSTART:19980119T070000Z mewakili 19 Januari 1998, pukul 0700 UTC. Perhatikan bahwa Aspose.Email mengabaikan akhiran UTC Z akhiran dan memperlakukan waktu sebagai waktu lokal. Standar RFC 2445 menyatakan bahwa bagian waktu yang ditentukan dalam aturan UNTIL dari pola berulang harus dalam format UTC; Aspose.Email menerima waktu dalam format apa pun pada aturan UNTIL.
  • DATE-TIME dengan waktu lokal dan zona waktu. Untuk merujuk zona waktu, DATE-TIME dimodifikasi dengan properti TZID. Misalnya, DTSTART;TZID=US-Eastern:19980119T020000 mewakili pukul 2 pagi di New York pada 19 Januari 1998. Perhatikan bahwa Aspose.Email saat ini mengabaikan parameter TZID dan memperlakukan waktu sebagai waktu lokal.
  • Kepatuhan BYWEEKNO dan ISO 8601. Gunakan BYWEEKNO hanya ketika mematuhi ISO 8601 diperlukan. Nomor minggu yang didefinisikan oleh ISO 8601 berbeda dari nomor minggu dalam arti biasa: nomor minggu satu tahun kalender adalah minggu pertama yang berisi setidaknya empat hari. Aturan BYWEEKNO menentukan daftar angka yang dipisahkan koma yang mengidentifikasi minggu dalam tahun (nilai yang valid adalah 1 hingga 53 dan -1 hingga -53), dan hanya berlaku untuk aturan YEARLY.

Lihat Juga