因项目需要,这几天写了个日历导入导出代码 (ICS文件)
与大家探讨探讨:
Code
#region
public override void VerifyRenderingInServerForm(Control control)
{
//base.VerifyRenderingInServerForm(control);
}
private ArrayList calendarResult = new ArrayList();
private ScheduleEntity seResult = new ScheduleEntity();
private string headerStr = "";
private string bodyStr = "";
private string tailStr = "";
private string enterSprite = "\r\n";
protected void Button1_Click(object sender, EventArgs e)
{
ScheduleEntity[] seTest = sm.select_("61b065cb-5192-4980-a207-0cff70725075", DateTime.Parse("2000-1-1"), DateTime.Parse("2010-1-1"));
int seLenth = seTest.Length;
for (int i = 0; i < seLenth; i++)
{
//string t = System.DateTime.Now.Month.ToString();
bodyStr += "BEGIN:VEVENT" + enterSprite;
bodyStr += "DTSTART:" + //"20070108T053000Z" + enterSprite;
seTest[i].BeginTime.Year.ToString() + seTest[i]
.BeginTime.Month.ToString("d2") + seTest[i].BeginTime.Day.ToString("d2")
+ "T" + seTest[i].BeginTime.Hour.ToString("d2") +
seTest[i].BeginTime.Minute.ToString("d2") + seTest[i].BeginTime.Second.ToString("d2")
+ seTest[i].BeginTime.Millisecond.ToString("d3") + "Z" + enterSprite;
bodyStr += "DTEND:" + //"20070108T053000Z" + enterSprite;
seTest[i].EndTime.Year.ToString() + seTest[i].
EndTime.Month.ToString("d2") + seTest[i].EndTime.Day.ToString("d2")
+ "T" + seTest[i].EndTime.Hour.ToString("d2") +
seTest[i].EndTime.Minute.ToString("d2") + seTest[i].EndTime.Second.ToString("d2")
+ seTest[i].EndTime.Millisecond.ToString("d3") + "Z" + enterSprite;
bodyStr += "DTSTAMP:" + //"20070108T053000Z" + enterSprite;
seTest[i].CreateTime.Year.ToString() +
seTest[i].CreateTime.Month.ToString("d2") + seTest[i].CreateTime.Day.ToString("d2")
+ "T" + seTest[i].CreateTime.Hour.ToString("d2") +
seTest[i].CreateTime.Minute.ToString("d2") + seTest[i].CreateTime.Second.ToString("d2")
+ seTest[i].CreateTime.Millisecond.ToString("d3") + "Z" + enterSprite;
bodyStr += "UID:"+System.Guid.NewGuid().ToString()+
"-lenovo.Calendar" + enterSprite;//
bodyStr += "CLASS:"+"private"+ enterSprite;//
bodyStr += "CREATED:" + //"20070108T053000Z" + enterSprite;
seTest[i].CreateTime.Year.ToString() + seTest[i].
CreateTime.Month.ToString("d2") + seTest[i].CreateTime.Day.ToString("d2")
+ "T" + seTest[i].CreateTime.Hour.ToString("d2") +
seTest[i].CreateTime.Minute.ToString("d2") + seTest[i].CreateTime.Second.ToString("d2")
+ seTest[i].CreateTime.Millisecond.ToString("d3") + "Z" + enterSprite;
bodyStr += "DESCRIPTION:" + seTest[i].Brief + enterSprite;//
bodyStr += "LAST-MODIFIED:" + //"20070108T053000Z" + enterSprite;
seTest[i].CreateTime.Year.ToString() + seTest[i].
CreateTime.Month.ToString("d2") + seTest[i].CreateTime.Day.ToString("d2")
+ "T" + seTest[i].CreateTime.Hour.ToString("d2") +
seTest[i].CreateTime.Minute.ToString("d2") + seTest[i].CreateTime.Second.ToString("d2")
+ seTest[i].CreateTime.Millisecond.ToString("d3") + "Z" + enterSprite;
bodyStr += "LOCATION:" + seTest[i].Place + enterSprite;//
bodyStr += "SEQUENCE:" + seTest[i].ScheduleTypeID.ToString() + enterSprite;//
bodyStr += "STATUS:" + seTest[i].UserName + enterSprite;//
bodyStr += "SUMMARY:" + seTest[i].Summary+ enterSprite;
bodyStr += "TRANSP:" + "OPAQUE" + enterSprite;
bodyStr += "END:VEVENT" + enterSprite;
string alarmBody = "";// Alarm
List<RemindParamEntity> awokeList = seTest[i].RemindParamList;
if (awokeList.Count > 0)
{
;
int test1 = 0;
test1 = 0;
}
foreach (RemindParamEntity al in awokeList)
{
;
int test = 0;
test = 0;
//短信提醒
if ((al.NeedRemind & 0x01) == 0x01)
{
alarmBody += "BEGIN:VALARM" + enterSprite;
alarmBody += "ACTION:" + "MOBILE" + enterSprite;
alarmBody += "DESCRIPTION:This is an event reminder"
+ enterSprite;
alarmBody += "TRIGGER:" + setAwokeTime(al.TimeType,al.TimeValue) + enterSprite;
alarmBody += "END:VALARM" + enterSprite;
}
//邮件提醒
if ((al.NeedRemind & 0x02) == 0x02)
{
alarmBody += "BEGIN:VALARM" + enterSprite;
alarmBody += "ACTION:" + "EMAIL" + enterSprite;
alarmBody += "DESCRIPTION:This is an event reminder" +
enterSprite;
alarmBody += "SUMMARY:Alarm notification" + enterSprite;
alarmBody += "ATTENDEE:mailto:" + Common.CommonLib.
GetMemberInfo().Email + enterSprite;
alarmBody += "TRIGGER:" + setAwokeTime(al.TimeType, al.
TimeValue) + enterSprite;
alarmBody += "END:VALARM" + enterSprite;
}
//PC提醒
if ((al.NeedRemind & 0x04) == 0x04)
{
alarmBody += "BEGIN:VALARM" + enterSprite;
alarmBody += "ACTION:" + "DISPLAY" + enterSprite;
alarmBody += "DESCRIPTION:This is an event reminder" + enterSprite;
alarmBody += "TRIGGER:" + setAwokeTime(al.TimeType,
al.TimeValue) + enterSprite;
alarmBody += "END:VALARM" + enterSprite;
}
}
//include the Alarm
bodyStr += alarmBody;
}
headerStr = "BEGIN:VCALENDAR" + enterSprite +
"PRODID:-//Lenovo Inc//Lenovo Calendar 90.6054//CN" + enterSprite +
"VERSION:1.0" + enterSprite +
"CALSCALE:GREGORIAN" + enterSprite +
"METHOD:PUBLISH" + enterSprite +
"X-WR-CALNAME:chen chen" + enterSprite +
"X-WR-TIMEZONE:Asia/Shanghai" + enterSprite +
"BEGIN:VTIMEZONE" + enterSprite +
"TZID:Asia/Shanghai" + enterSprite +
"X-LIC-LOCATION:Asia/Shanghai" + enterSprite +
"BEGIN:STANDARD" + enterSprite +
"TZOFFSETFROM:+0800" + enterSprite +
"TZOFFSETTO:+0800" + enterSprite +
"TZNAME:CST" + enterSprite +
"DTSTART:19700101T000000" + enterSprite +
"END:STANDARD" + enterSprite +
"END:VTIMEZONE" + enterSprite;
tailStr = "END:VCALENDAR"+enterSprite;
Response.Clear();
Response.Buffer = false;
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AppendHeader("Content-Disposition",
"attachment;filename=" + Server.UrlEncode("fileName") + ".ics");
Response.ContentType = "text/calendar";
this.EnableViewState = false;
Response.Write(headerStr+bodyStr+tailStr);
//Response.Write(sb.ToString());
Response.End();
}
private string setAwokeTime(short valueType,int value)
{
string result = "";
//TRIGGER:-P0DT0H10M0S
//提醒时间(TimeType)
switch (valueType)
{
//分钟
case 1:
if (value < 60)
{
result = "-P0DT0H" + value.ToString() + "M0S";
}
else if (value < 1440)
{
double aa = value / 60;
result = "-P0DT" + Math.Floor(aa).ToString() + "H" +
(value % 60).ToString() + "M0S";
}
else
{
double aa = value / 1440;
int leftM = value % 1440;//get this day value
double muniteLeft = leftM / 60;//get the hour value
result = "-P" + Math.Floor(aa).ToString() + "DT" +
Math.Floor(muniteLeft).ToString() + "H" + (leftM % 60).ToString() + "M0S";
}
break;
//小时//1440
case 2:
if (value < 24)
{
result = "-P0DT" + value.ToString() + "H0M0S";
}
else
{
double aa = value / 24;
result = "-P"+Math.Floor(aa).ToString()+"DT" +
(value%24).ToString() + "H0M0S";
}
break;
//天
case 3:
result = "-P" + value.ToString() + "DT0H0M0S";
break;
//周
case 4:
result = "-P" + (value * 7).ToString() + "DT0H0M0S";
break;
}
return result;
}
private DateTime getDateTime(string tmp)
{
//20090406T235959000Z
string value = "";
value = tmp.Substring(0, 4) + "-" + tmp.Substring(4, 2) + "-" +
tmp.Substring(6, 2) + " " +
tmp.Substring(9, 2) + ":" + tmp.Substring(11, 2);
return Convert.ToDateTime(value);
}
//case calendar
private List<RemindParamEntity> awokeList = new
List<RemindParamEntity>();
private string caseCalendar(string tmp,string value )
{
bool alarmBegin = false;
if (tmp == "BEGIN")
{
alarmBegin = true;
awokeList=seResult.RemindParamList;
return;
}
else if (tmp == "END")
{
alarmBegin = true;
}
else if (alarmBegin)
{
return;
}
//List<RemindParamEntity> awokeList = seResult.RemindParamList;
//List<string> singleCalendarList = new List<string>();
//for (int i = 0; i < sLenth; i++)
//{
// if (s[i] == "BEGIN:VEVENT")
// {
// calendarBegin = true;
// singleCalendarList = new List<string>();
// //singleCalendarList.Clear();
// }
// else if (s[i] == "END:VEVENT")
// {
// calendarArray.Add(singleCalendarList);
// calendarBegin = false;
// }
// else if (calendarBegin)
// {
// singleCalendarList.Add(s[i]);
// }
//}
//////
switch (tmp)
{
case "DTSTART":
seResult.BeginTime = getDateTime(value);
break;
case "DTEND":
seResult.EndTime = getDateTime(value);
break;
case "DTSTAMP":
// seResult.CreateTime = getDateTime(value);
;
break;
case "UID":
//seResult.ScheduleID = 1;
;
break;
case "CLASS":
seResult.ScheduleTypeSet = value;
break;
case "CREATED":
seResult.CreateTime = getDateTime(value);
break;
case "DESCRIPTION":
seResult.Brief = value;
break;
case "LAST-MODIFIED":
//seResult.CreateTime = getDateTime(value);
;
break;
case "LOCATION":
seResult.Place = value;
break;
case "SEQUENCE":
//
;
break;
case "STATUS":
//;
;
break;
case "SUMMARY":
seResult.Summary = value;
break;
case "TRANSP":
//;
;
break;
case "END":
;
;
break;
default:
;
break;
}
return "";
}
private ArrayList calendarArray = new ArrayList();
protected void Button2_Click(object sender, EventArgs e)
{
string[] s = GetStopWords();
int sLenth = s.Length;
List<string> singleCalendarList= new List<string>();
bool calendarBegin = false;
for (int i = 0; i < sLenth; i++)
{
if (s[i] == "BEGIN:VEVENT")
{
calendarBegin = true;
singleCalendarList=new List<string>();
//singleCalendarList.Clear();
}
else if (s[i] == "END:VEVENT")
{
calendarArray.Add(singleCalendarList);
calendarBegin = false;
}
else if(calendarBegin)
{
singleCalendarList.Add(s[i]);
}
}
doWork(calendarArray);
}
private void doWork(ArrayList a)
{
//separate calendar
List<string> calendar = new List<string>();
int len = a.Count;
for (int i = 0; i < len; i++)
{
calendar = (List<string>)a[i];
doBusiness(calendar);
}
//to do ddataBase
}
private void doBusiness(List<string> L)
{
//seResult init;
//seResult.BeginTime = "";
seResult = new ScheduleEntity();
//singel calendar business
foreach(string calendar in L)
{
string[] subChild = calendar.Split(':');
caseCalendar(subChild[0], subChild[1]);
}
calendarResult.Add(seResult);
}
protected string[] GetStopWords()
{
using (StreamReader reader = new StreamReader(Server.MapPath("~" + "http://www.cnblogs.com/zhegebucuo/admin/file://page//files//calendarFile//44.ics")))
{
string words = reader.ReadToEnd();
return words.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
}
}
标签:
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:博客园