2017-07-18 7 views
2

ローカルイベントの登録確認メールを送信するC#コンソールアプリがあります。 UTC時刻を指定して.ICSカレンダー予定リマインダを電子メールに添付するロジックを追加しました。UTC時刻が指定されていてもリマインダ(.ICS)の電子メール添付がタイムゾーンを考慮していない

ユーザが電子メールを取得してカレンダーに予定を追加すると、ローカルPCの環境の時間に合わせて調整する必要があります。 たとえば、私のテストでは、イベントはサンディエゴの午前11時半から午後1時までです。 私は(セントラルタイムゾーンで)電子メールの添付ファイルを開いてカレンダーに追加すると、午後1時30分〜午後3時に来るはずですが、まだ11時半〜1時です。

私はhttp://erics-notes.blogspot.com/2013/05/fixing-ics-time-zone.htmlが(のような「DTSTART; TZID =アメリカ/ Los_Angeles:20130602T130000」)DTSTART & DTENDにVTIMEZONEブロックとタイムゾーンの参照を追加するために助言を見てきました が、その例では、彼はUTC時間を使用していません。

.ICS添付ファイルには次の情報が含まれています。余分な改行を残して申し訳ありませんが、そこにいないときはすべて一緒に実行します。 注DTSTART & DTEND「Z」ユニバーサル指定された時間:

BEGIN:VCALENDAR 

PRODID:-//Save to my Calendar 

VERSION:2.0 

METHOD:PUBLISH 

BEGIN:VEVENT 

DTSTART:20170622T163000Z 

DTEND:20170622T180000Z 

DTSTAMP:20170718T134127Z 

UID:6f59cf3b-99b5-4935-8f7c-3cb4c2e7a53f 

CREATED:20170718T134127Z 

LAST-MODIFIED:20170718T134127Z 

X-ALT-DESC;FMTTYPE=text/html:<a href="http://mycompany.net/Events/12345">Party<a> 
DESCRIPTION:mycompany.net/Events/12345 
LOCATION:Restaurant name, 123 Elm, San Diego CA 

SEQUENCE:0 

STATUS:CONFIRMED 

SUMMARY:My company’s event 

END:VEVENT 

END:VCALENDAR 

私は何かアドバイスに感謝...ありがとう!私はUTCに開始&終了時刻を変換しています

私のコード...かなり平凡な、しかしノート:​​

private static Attachment CreateEventCalendarReminder(DataRow dr) 
    { 
     var sb = new StringBuilder(); 
     string nowUTCString = DateTime.Now.ToUniversalTime().ToString("yyyyMMddTHHmmssZ"); 

     sb.AppendLine("BEGIN:VCALENDAR"); 
     sb.AppendLine("PRODID:-//Save to my Calendar"); 
     sb.AppendLine("VERSION:2.0"); 
     sb.AppendLine("METHOD:PUBLISH");    
     //sb.AppendLine("TZ:+00"); 

     sb.AppendLine("BEGIN:VEVENT"); 
     sb.AppendLine("DTSTART:" + DateTime.Parse(dr["StartDate"].ToString()).ToUniversalTime().ToString("yyyyMMddTHHmmssZ")); 
     sb.AppendLine("DTEND:" + DateTime.Parse(dr["EndDate"].ToString()).ToUniversalTime().ToString("yyyyMMddTHHmmssZ")); 
     sb.AppendLine("DTSTAMP:" + nowUTCString); 
     sb.AppendLine("UID:" + Guid.NewGuid()); 
     sb.AppendLine("CREATED:" + nowUTCString); 
     sb.AppendLine("LAST-MODIFIED:" + nowUTCString); 


     sb.AppendLine("X-ALT-DESC;FMTTYPE=text/html:" 
       + "Thank you for registering for our event. Click " 
       + (string)dr["EventDescHyperlink"] 
       + " DetermineWhichEmailsToSend view the event details. We look forward to seeing you Attachment the EventArgs and appreciate your support."); 

     sb.AppendLine("DESCRIPTION:" + (string)dr["EventDescURL"]); 
     sb.AppendLine("LOCATION:" + (string)dr["VenueCombinedInfo"]); 

     sb.AppendLine("SEQUENCE:0"); 
     sb.AppendLine("STATUS:CONFIRMED"); 
     sb.AppendLine("SUMMARY:" + "My Company" + (string)dr["OfficeName"] + " Event"); 
     sb.AppendLine("END:VEVENT"); 
     sb.AppendLine("END:VCALENDAR"); 

     var calendarBytes = Encoding.UTF8.GetBytes(sb.ToString()); 
     MemoryStream ms = new MemoryStream(calendarBytes); 
     return new System.Net.Mail.Attachment(ms, "EventReminder.ics", "text/calendar"); 
    } 

答えて

1

あなたはUTC時刻を使用するVEVENT前に指定する必要があります:

TZ:+00 

BEGIN:VEVENT 
関連する問題