strconv.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. package context
  2. import (
  3. "fmt"
  4. "strconv"
  5. "time"
  6. )
  7. func strParseUint(value string) (uint, error) {
  8. result, err := strconv.ParseUint(value, 10, strconv.IntSize)
  9. if err != nil {
  10. return 0, err
  11. }
  12. return uint(result), nil
  13. }
  14. func strParseUint8(value string) (uint8, error) {
  15. result, err := strconv.ParseUint(value, 10, 8)
  16. if err != nil {
  17. return 0, err
  18. }
  19. return uint8(result), nil
  20. }
  21. func strParseUint16(value string) (uint16, error) {
  22. result, err := strconv.ParseUint(value, 10, 16)
  23. if err != nil {
  24. return 0, err
  25. }
  26. return uint16(result), nil
  27. }
  28. func strParseUint32(value string) (uint32, error) {
  29. result, err := strconv.ParseUint(value, 10, 32)
  30. if err != nil {
  31. return 0, err
  32. }
  33. return uint32(result), nil
  34. }
  35. func strParseUint64(value string) (uint64, error) {
  36. result, err := strconv.ParseUint(value, 10, 64)
  37. if err != nil {
  38. return 0, err
  39. }
  40. return result, nil
  41. }
  42. func strParseInt(value string) (int, error) {
  43. result, err := strconv.Atoi(value)
  44. if err != nil {
  45. return 0, err
  46. }
  47. return result, nil
  48. }
  49. func strParseInt8(value string) (int8, error) {
  50. result, err := strconv.ParseInt(value, 10, 8)
  51. if err != nil {
  52. return 0, err
  53. }
  54. return int8(result), nil
  55. }
  56. func strParseInt16(value string) (int16, error) {
  57. result, err := strconv.ParseInt(value, 10, 16)
  58. if err != nil {
  59. return 0, err
  60. }
  61. return int16(result), nil
  62. }
  63. func strParseInt32(value string) (int32, error) {
  64. result, err := strconv.ParseInt(value, 10, 32)
  65. if err != nil {
  66. return 0, err
  67. }
  68. return int32(result), nil
  69. }
  70. func strParseInt64(value string) (int64, error) {
  71. result, err := strconv.ParseInt(value, 10, 64)
  72. if err != nil {
  73. return 0, err
  74. }
  75. return result, nil
  76. }
  77. func strParseFloat32(value string) (float32, error) {
  78. result, err := strconv.ParseFloat(value, 32)
  79. if err != nil {
  80. return 0, err
  81. }
  82. return float32(result), nil
  83. }
  84. func strParseFloat64(value string) (float64, error) {
  85. result, err := strconv.ParseFloat(value, 64)
  86. if err != nil {
  87. return 0, err
  88. }
  89. return result, nil
  90. }
  91. func strParseComplex64(value string) (complex64, error) {
  92. result, err := strconv.ParseComplex(value, 64)
  93. if err != nil {
  94. return 0, err
  95. }
  96. return complex64(result), nil
  97. }
  98. func strParseComplex128(value string) (complex128, error) {
  99. result, err := strconv.ParseComplex(value, 128)
  100. if err != nil {
  101. return 0, err
  102. }
  103. return result, nil
  104. }
  105. func strParseBool(value string) (bool, error) {
  106. result, err := strconv.ParseBool(value)
  107. if err != nil {
  108. return false, err
  109. }
  110. return result, nil
  111. }
  112. var dayNames = map[string]time.Weekday{
  113. // longDayNames.
  114. "Sunday": time.Sunday,
  115. "Monday": time.Monday,
  116. "Tuesday": time.Tuesday,
  117. "Wednesday": time.Wednesday,
  118. "Thursday": time.Thursday,
  119. "Friday": time.Friday,
  120. "Saturday": time.Saturday,
  121. // longDayNames: lowercase.
  122. "sunday": time.Sunday,
  123. "monday": time.Monday,
  124. "tuesday": time.Tuesday,
  125. "wednesday": time.Wednesday,
  126. "thursday": time.Thursday,
  127. "friday": time.Friday,
  128. "saturday": time.Saturday,
  129. // shortDayNames
  130. "Sun": time.Sunday,
  131. "Mon": time.Monday,
  132. "Tue": time.Tuesday,
  133. "Wed": time.Wednesday,
  134. "Thu": time.Thursday,
  135. "Fri": time.Friday,
  136. "Sat": time.Saturday,
  137. // shortDayNames: lowercase.
  138. "sun": time.Sunday,
  139. "mon": time.Monday,
  140. "tue": time.Tuesday,
  141. "wed": time.Wednesday,
  142. "thu": time.Thursday,
  143. "fri": time.Friday,
  144. "sat": time.Saturday,
  145. }
  146. func strParseWeekday(value string) (time.Weekday, error) {
  147. result, ok := dayNames[value]
  148. if !ok {
  149. return 0, ErrNotFound
  150. }
  151. return result, nil
  152. }
  153. func strParseTime(layout, value string) (time.Time, error) {
  154. return time.Parse(layout, value)
  155. }
  156. const (
  157. simpleDateLayout1 = "2006/01/02"
  158. simpleDateLayout2 = "2006-01-02"
  159. )
  160. func strParseSimpleDate(value string) (time.Time, error) {
  161. t1, err := strParseTime(simpleDateLayout1, value)
  162. if err != nil {
  163. t2, err2 := strParseTime(simpleDateLayout2, value)
  164. if err2 != nil {
  165. return time.Time{}, fmt.Errorf("%s, %w", err.Error(), err2)
  166. }
  167. return t2, nil
  168. }
  169. return t1, nil
  170. }