شركة التطبيقات المتكاملة لتصميم النظم البرمجية الخاصة

Integrated Applications Programming Company

Skip Navigation LinksHome » Code Library » Hijri

Public general use code classes and xml files that we've compiled and used over the years:

Hijri date handler class.

   1:  using System;
   2:  using System.Globalization;
   3:  using System.Web;
   4:   
   5:  /*
   6:   * Attention
   7:   * This library has been written by: Anas Reslan Bahsas if you are going to use it please dont remove this line.
   8:   * you have to add this class to a asp.net web project to work well. I will be grateful to receive any commments or 
   9:   * suggestion to anasbahsas@hotmail.com
  10:   * 
  11:   * http://www.aawsat.com/
  12:   */
  13:   
  14:  namespace Ia.Cl.Model
  15:  {
  16:      ////////////////////////////////////////////////////////////////////////////
  17:   
  18:      /// <summary publish="true">
  19:      /// Hijri date handler class.
  20:      /// </summary>
  21:      /// <remarks> 
  22:      /// Copyright © 2001-2015 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
  23:      ///
  24:      /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
  25:      /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
  26:      ///
  27:      /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  28:      /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  29:      /// 
  30:      /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
  31:      /// 
  32:      /// Copyright notice: This notice may not be removed or altered from any source distribution.
  33:      /// </remarks> 
  34:      public class Hijri
  35:      {
  36:          private static HttpContext cur;
  37:   
  38:          private const int startGreg = 1900;
  39:          private const int endGreg = 2100;
  40:          private static string[] allFormats = { "yyyy/MM/dd", "yyyy/M/d", "dd/MM/yyyy", "d/M/yyyy", "dd/M/yyyy", "d/MM/yyyy", "yyyy-MM-dd", "yyyy-M-d", "dd-MM-yyyy", "d-M-yyyy", "dd-M-yyyy", "d-MM-yyyy", "yyyy MM dd", "yyyy M d", "dd MM yyyy", "d M yyyy", "dd M yyyy", "d MM yyyy" };
  41:          private static CultureInfo arCul;
  42:          private static CultureInfo enCul;
  43:          private static HijriCalendar h;
  44:          private static GregorianCalendar g;
  45:   
  46:          ////////////////////////////////////////////////////////////////////////////
  47:   
  48:          /// <summary>
  49:          ///
  50:          /// </summary>
  51:          public Hijri()
  52:          {
  53:              cur = HttpContext.Current;
  54:   
  55:              arCul = new CultureInfo("ar-SA");
  56:              enCul = new CultureInfo("en-US");
  57:   
  58:              h = new HijriCalendar();
  59:              g = new GregorianCalendar(GregorianCalendarTypes.USEnglish);
  60:   
  61:              arCul.DateTimeFormat.Calendar = h;
  62:          }
  63:   
  64:          ////////////////////////////////////////////////////////////////////////////
  65:   
  66:          /// <summary>
  67:          /// Check if string is hijri date and then return true 
  68:          /// </summary>
  69:          /// <param name="hijri"></param>
  70:          /// <returns></returns>
  71:          public static bool IsHijri(string hijri)
  72:          {
  73:              if (hijri.Length <= 0)
  74:              {
  75:                  cur.Trace.Warn("IsHijri Error: Date String is Empty");
  76:                  return false;
  77:              }
  78:              try
  79:              {
  80:                  DateTime tempDate = DateTime.ParseExact(hijri, allFormats, arCul.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces);
  81:                  if (tempDate.Year >= startGreg && tempDate.Year <= endGreg) return true;
  82:                  else return false;
  83:              }
  84:              catch (Exception ex)
  85:              {
  86:                  cur.Trace.Warn("IsHijri Error :" + hijri.ToString() + "\n" + ex.Message);
  87:                  return false;
  88:              }
  89:          }
  90:   
  91:          ////////////////////////////////////////////////////////////////////////////
  92:   
  93:          /// <summary>
  94:          /// Check if string is Gregorian date and then return true 
  95:          /// </summary>
  96:          /// <param name="greg"></param>
  97:          /// <returns></returns>
  98:          public static bool IsGreg(string greg)
  99:          {
 100:              if (greg.Length <= 0)
 101:              {
 102:                  cur.Trace.Warn("IsGreg :Date String is Empty");
 103:                  return false;
 104:              }
 105:              try
 106:              {
 107:                  DateTime tempDate = DateTime.ParseExact(greg, allFormats, enCul.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces);
 108:                  if (tempDate.Year >= startGreg && tempDate.Year <= endGreg) return true;
 109:                  else return false;
 110:              }
 111:              catch (Exception ex)
 112:              {
 113:                  cur.Trace.Warn("IsGreg Error :" + greg.ToString() + "\n" + ex.Message);
 114:                  return false;
 115:              }
 116:          }
 117:   
 118:          ////////////////////////////////////////////////////////////////////////////
 119:   
 120:          /// <summary>
 121:          /// Return Formatted Hijri date string 
 122:          /// </summary>
 123:          /// <param name="date"></param>
 124:          /// <param name="format"></param>
 125:          /// <returns></returns>
 126:          public static string FormatHijri(string date, string format)
 127:          {
 128:              if (date.Length <= 0)
 129:              {
 130:                  cur.Trace.Warn("Format :Date String is Empty");
 131:                  return "";
 132:              }
 133:              try
 134:              {
 135:                  DateTime tempDate = DateTime.ParseExact(date, allFormats, arCul.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces);
 136:                  return tempDate.ToString(format, arCul.DateTimeFormat);
 137:   
 138:              }
 139:              catch (Exception ex)
 140:              {
 141:                  cur.Trace.Warn("Date :\n" + ex.Message);
 142:                  return "";
 143:              }
 144:          }
 145:   
 146:          ////////////////////////////////////////////////////////////////////////////
 147:   
 148:          /// <summary>
 149:          /// Returned Formatted Gregorian date string
 150:          /// </summary>
 151:          /// <param name="date"></param>
 152:          /// <param name="format"></param>
 153:          /// <returns></returns>
 154:          public static string FormatGreg(string date, string format)
 155:          {
 156:              if (date.Length <= 0)
 157:              {
 158:                  cur.Trace.Warn("Format :Date String is Empty");
 159:                  return "";
 160:              }
 161:              try
 162:              {
 163:                  DateTime tempDate = DateTime.ParseExact(date, allFormats, enCul.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces);
 164:                  return tempDate.ToString(format, enCul.DateTimeFormat);
 165:              }
 166:              catch (Exception ex)
 167:              {
 168:                  cur.Trace.Warn("Date :\n" + ex.Message);
 169:                  return "";
 170:              }
 171:          }
 172:   
 173:          ////////////////////////////////////////////////////////////////////////////
 174:   
 175:          /// <summary>
 176:          /// Return Today Gregorian date and return it in yyyy/MM/dd format
 177:          /// </summary>
 178:          /// <returns></returns>
 179:          public static string GDateNow()
 180:          {
 181:              try
 182:              {
 183:                  return DateTime.UtcNow.AddHours(3).ToString("yyyy-MM-dd", enCul.DateTimeFormat);
 184:              }
 185:              catch (Exception ex)
 186:              {
 187:                  cur.Trace.Warn("GDateNow :\n" + ex.Message);
 188:                  return "";
 189:              }
 190:          }
 191:   
 192:          ////////////////////////////////////////////////////////////////////////////
 193:   
 194:          /// <summary>
 195:          /// Return formatted today Gregorian date based on your format
 196:          /// </summary>
 197:          /// <param name="format"></param>
 198:          /// <returns></returns>
 199:          public static string GDateNow(string format)
 200:          {
 201:              try
 202:              {
 203:                  return DateTime.UtcNow.AddHours(3).ToString(format, enCul.DateTimeFormat);
 204:              }
 205:              catch (Exception ex)
 206:              {
 207:                  cur.Trace.Warn("GDateNow :\n" + ex.Message);
 208:                  return "";
 209:              }
 210:          }
 211:   
 212:          ////////////////////////////////////////////////////////////////////////////
 213:   
 214:          /// <summary>
 215:          /// Return Today Hijri date and return it in yyyy-MM-dd format
 216:          /// </summary>
 217:          /// <returns></returns>
 218:          public string HDateNow()
 219:          {
 220:              try
 221:              {
 222:                  return DateTime.UtcNow.AddHours(3).ToString("yyyy-MM-dd", arCul.DateTimeFormat);
 223:              }
 224:              catch (Exception ex)
 225:              {
 226:                  cur.Trace.Warn("HDateNow :\n" + ex.Message);
 227:                  return "";
 228:              }
 229:          }
 230:   
 231:          ////////////////////////////////////////////////////////////////////////////
 232:   
 233:          /// <summary>
 234:          /// Return formatted today hijri date based on your format
 235:          /// </summary>
 236:          /// <param name="format"></param>
 237:          /// <returns></returns>
 238:          public static string HDateNow(string format)
 239:          {
 240:              try
 241:              {
 242:                  return DateTime.UtcNow.AddHours(3).ToString(format, arCul.DateTimeFormat);
 243:              }
 244:              catch (Exception ex)
 245:              {
 246:                  cur.Trace.Warn("HDateNow :\n" + ex.Message);
 247:                  return "";
 248:              }
 249:          }
 250:   
 251:          ////////////////////////////////////////////////////////////////////////////
 252:   
 253:          /// <summary>
 254:          /// Convert Hijri Date to it's equivalent Gregorian Date
 255:          /// </summary>
 256:          /// <param name="hijri"></param>
 257:          /// <returns></returns>
 258:          public static string HijriToGreg(string hijri)
 259:          {
 260:              if (hijri.Length <= 0)
 261:              {
 262:                  cur.Trace.Warn("HijriToGreg :Date String is Empty");
 263:                  return "";
 264:              }
 265:              try
 266:              {
 267:                  DateTime tempDate = DateTime.ParseExact(hijri, allFormats, arCul.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces);
 268:                  return tempDate.ToString("yyyy-MM-dd", enCul.DateTimeFormat);
 269:              }
 270:              catch (Exception ex)
 271:              {
 272:                  cur.Trace.Warn("HijriToGreg :" + hijri.ToString() + "\n" + ex.Message);
 273:                  return "";
 274:              }
 275:          }
 276:   
 277:          ////////////////////////////////////////////////////////////////////////////
 278:   
 279:          /// <summary>
 280:          /// Convert Hijri Date to it's equivalent Gregorian Date
 281:          /// and return it in specified format
 282:          /// </summary>
 283:          /// <param name="hijri"></param>
 284:          /// <param name="format"></param>
 285:          /// <returns></returns>
 286:          public static string HijriToGreg(string hijri, string format)
 287:          {
 288:              if (hijri.Length <= 0)
 289:              {
 290:                  cur.Trace.Warn("HijriToGreg :Date String is Empty");
 291:                  return "";
 292:              }
 293:              try
 294:              {
 295:                  DateTime tempDate = DateTime.ParseExact(hijri, allFormats, arCul.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces);
 296:                  return tempDate.ToString(format, enCul.DateTimeFormat);
 297:   
 298:              }
 299:              catch (Exception ex)
 300:              {
 301:                  cur.Trace.Warn("HijriToGreg :" + hijri.ToString() + "\n" + ex.Message);
 302:                  return "";
 303:              }
 304:          }
 305:   
 306:          ////////////////////////////////////////////////////////////////////////////
 307:   
 308:          /// <summary>
 309:          /// Convert Gregoian Date to it's equivalent Hijir Date
 310:          /// </summary>
 311:          /// <param name="greg"></param>
 312:          /// <returns></returns>
 313:          public static string GregToHijri(string greg)
 314:          {
 315:              if (greg.Length <= 0)
 316:              {
 317:                  cur.Trace.Warn("GregToHijri :Date String is Empty");
 318:                  return "";
 319:              }
 320:              try
 321:              {
 322:                  DateTime tempDate = DateTime.ParseExact(greg, allFormats, enCul.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces);
 323:                  return tempDate.ToString("yyyy-MM-dd", arCul.DateTimeFormat);
 324:              }
 325:              catch (Exception ex)
 326:              {
 327:                  cur.Trace.Warn("GregToHijri :" + greg.ToString() + "\n" + ex.Message);
 328:                  return "";
 329:              }
 330:          }
 331:   
 332:          ////////////////////////////////////////////////////////////////////////////
 333:   
 334:          /// <summary>
 335:          /// Convert Hijri Date to it's equivalent Gregorian Date and
 336:          /// return it in specified format
 337:          /// </summary>
 338:          /// <param name="greg"></param>
 339:          /// <param name="format"></param>
 340:          /// <returns></returns>
 341:          public static string GregToHijri(string greg, string format)
 342:          {
 343:              if (greg.Length <= 0)
 344:              {
 345:                  cur.Trace.Warn("GregToHijri :Date String is Empty");
 346:                  return "";
 347:              }
 348:              try
 349:              {
 350:                  DateTime tempDate = DateTime.ParseExact(greg, allFormats, enCul.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces);
 351:                  return tempDate.ToString(format, arCul.DateTimeFormat);
 352:              }
 353:              catch (Exception ex)
 354:              {
 355:                  cur.Trace.Warn("GregToHijri :" + greg.ToString() + "\n" + ex.Message);
 356:                  return "";
 357:              }
 358:          }
 359:   
 360:          ////////////////////////////////////////////////////////////////////////////
 361:   
 362:          /// <summary>
 363:          /// Return Gregrian Date Time as digit stamp
 364:          /// </summary>
 365:          /// <returns></returns>
 366:          public static string GTimeStamp()
 367:          {
 368:              return GDateNow("yyyyMMddHHmmss");
 369:          }
 370:   
 371:          ////////////////////////////////////////////////////////////////////////////
 372:          /// <summary>
 373:          /// Return Hijri Date Time as digit stamp
 374:          /// </summary>
 375:          /// <returns></returns>
 376:          public static string HTimeStamp()
 377:          {
 378:              return HDateNow("yyyyMMddHHmmss");
 379:          }
 380:   
 381:          ////////////////////////////////////////////////////////////////////////////
 382:   
 383:          /// <summary>
 384:          /// Compare two instaces of string date 
 385:          /// and return indication of thier values 
 386:          /// </summary>
 387:          /// <param name="d1"></param>
 388:          /// <param name="d2"></param>
 389:          /// <returns>positive d1 is greater than d2,
 390:          /// negative d1 is smaller than d2, 0 both are equal</returns>
 391:          public static int Compare(string d1, string d2)
 392:          {
 393:              try
 394:              {
 395:                  DateTime date1 = DateTime.ParseExact(d1, allFormats, arCul.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces);
 396:                  DateTime date2 = DateTime.ParseExact(d2, allFormats, arCul.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces);
 397:                  return DateTime.Compare(date1, date2);
 398:              }
 399:              catch (Exception ex)
 400:              {
 401:                  cur.Trace.Warn("Compare :" + "\n" + ex.Message);
 402:                  return -1;
 403:              }
 404:          }
 405:   
 406:          ////////////////////////////////////////////////////////////////////////////
 407:          ////////////////////////////////////////////////////////////////////////////
 408:      }
 409:  }
 410: