tz1.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /*
  2. * Copyright (C) 1995. Bill Brown <brown@gis.uiuc.edu> & Michael Shapiro
  3. *
  4. * This program is free software under the GPL (>=v2)
  5. * Read the file GPL.TXT coming with GRASS for details.
  6. */
  7. #include <grass/datetime.h>
  8. static int have(int x, const DateTime * dt)
  9. {
  10. return datetime_is_between(x, dt->from, dt->to);
  11. }
  12. /*!
  13. * \brief
  14. *
  15. * returns 0 on success
  16. *
  17. * \param dt
  18. * \param minutes
  19. * \return int
  20. */
  21. int datetime_check_timezone(const DateTime * dt, int minutes)
  22. {
  23. if (!datetime_is_absolute(dt))
  24. return datetime_error(-1, "datetime not absolute");
  25. if (!have(DATETIME_MINUTE, dt))
  26. return datetime_error(-2, "datetime has no minute");
  27. if (!datetime_is_valid_timezone(minutes))
  28. return datetime_error(-3, "invalid datetime timezone");
  29. return 0;
  30. }
  31. /*!
  32. * \brief
  33. *
  34. * returns 0 on success
  35. *
  36. * \param dt
  37. * \param minutes
  38. * \return int
  39. */
  40. int datetime_get_timezone(const DateTime * dt, int *minutes)
  41. {
  42. int stat;
  43. stat = datetime_check_timezone(dt, dt->tz);
  44. if (stat == 0)
  45. *minutes = dt->tz;
  46. return stat;
  47. }
  48. /*!
  49. * \brief
  50. *
  51. * returns 0 on success
  52. *
  53. * \param dt
  54. * \param minutes
  55. * \return int
  56. */
  57. int datetime_set_timezone(DateTime * dt, int minutes)
  58. {
  59. int stat;
  60. stat = datetime_check_timezone(dt, minutes);
  61. if (stat == 0)
  62. dt->tz = minutes;
  63. return stat;
  64. }
  65. /*!
  66. * \brief
  67. *
  68. * unsets timezone in 'dt'
  69. * returns 0
  70. *
  71. * \param dt
  72. * \return int
  73. */
  74. int datetime_unset_timezone(DateTime * dt)
  75. {
  76. dt->tz = -9999;
  77. return 0;
  78. }
  79. /*!
  80. * \brief
  81. *
  82. * Returns:
  83. * 1 OK: -720 <= minutes <= 780 (720 = 12 hours; 780 = 13 hours)
  84. * 0 NOT OK
  85. *
  86. * \param minutes
  87. * \return int
  88. */
  89. int datetime_is_valid_timezone(int minutes)
  90. {
  91. return (minutes >= -720 && minutes <= 780);
  92. }