Advertisement
Guest User

Untitled

a guest
May 31st, 2016
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.70 KB | None | 0 0
  1.  
  2. import org.threeten.bp.format.DateTimeFormatter
  3.  
  4.  
  5. class DateFormatterBuilder {
  6.  
  7. enum class DateTimeUnit {
  8. YEAR,
  9. MONTH,
  10. DAY
  11. }
  12.  
  13. private var prefix: ((DateTimeUnit, Boolean) -> String)? = null
  14. private var suffix: ((DateTimeUnit) -> String)? = null
  15. private var leadingZero: Boolean = false
  16.  
  17. private var yearFormat: ((Boolean) -> String)? = null
  18. private var monthFormat: ((Boolean) -> String)? = null
  19. private var dayFormat: ((Boolean) -> String)? = null
  20.  
  21. val hyphened: DateFormatterBuilder
  22. get() {
  23. prefix = { unit, inMiddle ->
  24. if (inMiddle) {
  25. "-"
  26. } else {
  27. ""
  28. }
  29. }
  30. suffix = null
  31. return this
  32. }
  33.  
  34. val slashed: DateFormatterBuilder
  35. get() {
  36. prefix = { unit, inMiddle ->
  37. if (inMiddle) {
  38. "/"
  39. } else {
  40. ""
  41. }
  42. }
  43. suffix = null
  44. return this
  45. }
  46.  
  47. val japanese: DateFormatterBuilder
  48. get() {
  49. suffix = {
  50. when (it) {
  51. DateTimeUnit.YEAR -> "ๅนด"
  52. DateTimeUnit.MONTH -> "ๆœˆ"
  53. DateTimeUnit.DAY -> "ๆ—ฅ"
  54. }
  55. }
  56. prefix = null
  57. return this
  58. }
  59.  
  60. val year: DateFormatterBuilder
  61. get() {
  62. yearFormat = {
  63. appendPrefixAndSuffix(if (leadingZero) "yyyy" else "y", DateTimeUnit.YEAR, it)
  64. }
  65. return this
  66. }
  67.  
  68. val month: DateFormatterBuilder
  69. get() {
  70. monthFormat = {
  71. appendPrefixAndSuffix(if (leadingZero) "MM" else "M", DateTimeUnit.MONTH, it)
  72. }
  73. return this
  74. }
  75.  
  76. val day: DateFormatterBuilder
  77. get() {
  78. dayFormat = {
  79. appendPrefixAndSuffix(if (leadingZero) "dd" else "d", DateTimeUnit.DAY, it)
  80. }
  81. return this
  82. }
  83.  
  84. val withLeadingZero: DateFormatterBuilder
  85. get() {
  86. this.leadingZero = true
  87. return this
  88. }
  89.  
  90. private fun appendPrefixAndSuffix(format: String, unit: DateTimeUnit, inMiddle: Boolean): String
  91. = "${prefix?.let { it(unit, inMiddle) } ?: ""}$format${suffix?.let { it(unit) } ?: ""}"
  92.  
  93. fun build(): DateTimeFormatter {
  94. val sb = StringBuilder().apply {
  95. yearFormat?.let { append(it(this.length > 0)) }
  96. monthFormat?.let { append(it(this.length > 0)) }
  97. dayFormat?.let { append(it(this.length > 0)) }
  98. }
  99. return DateTimeFormatter.ofPattern(sb.toString())
  100. }
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement