0

I need to write a function to convert any date time string to EpochMillisecond and I have written the following

  val dateMatch1:Regex = """(\d\d\d\d)-(\d\d)-(\d\d)""".r

  val timeMatch1:Regex = """(\d\d):(\d\d):(\d\d).(\d\d\d)""".r
  val timeMatch2:Regex = """(\d\d):(\d\d):(\d\d)""".r
  val timeMatch3:Regex = """(\d\d):(\d\d)""".r
  val timeMatch4:Regex = """(\d\d)""".r

  val dateTimeMatch1:Regex = """(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d).(\d\d\d)""".r
  val dateTimeMatch2:Regex = """(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)""".r
  val dateTimeMatch3:Regex = """(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d)""".r
  val dateTimeMatch4:Regex = """(\d\d\d\d)-(\d\d)-(\d\d) (\d\d)""".r


 def stringToTime(data:String): Long = {

    val now = LocalDateTime.now()

    LocalDate.of(now.getYear, now.getMonthValue, now.getDayOfMonth)

    val (year:Int, month:Int, day:Int, hour:Int, minute:Int, second:Int,nanoSecond:Int) = data match {
      case dateMatch1(year, month, day) => (year.toInt, month.toInt, day.toInt, 0, 0, 0, 0)

      case timeMatch1(hour, minute, second,nanoSecond) => (now.getYear, now.getMonthValue, now.getDayOfMonth,hour.toInt, minute.toInt, second.toInt, nanoSecond.toInt * Math.pow(10,6).toInt)
      case timeMatch2(hour, minute, second) =>(now.getYear, now.getMonthValue, now.getDayOfMonth,hour.toInt,hour.toInt, minute.toInt, second.toInt,0)
      case timeMatch3(hour, minute) => (now.getYear, now.getMonthValue, now.getDayOfMonth,hour.toInt,hour.toInt, minute.toInt,0,0)
      case timeMatch4(hour) => (now.getYear, now.getMonthValue, now.getDayOfMonth,hour.toInt,hour.toInt, 0,0,0)

      case dateTimeMatch1(year, month, day, hour, minute, second,nanoSecond) =>(year.toInt, month.toInt, day.toInt, hour.toInt, minute.toInt, second.toInt, nanoSecond.toInt * Math.pow(10,6).toInt)
      case dateTimeMatch2(year, month, day, hour, minute, second) => (year.toInt, month.toInt, day.toInt, hour.toInt, minute.toInt, second.toInt,0)
      case dateTimeMatch3(year, month, day, hour, minute) => (year.toInt, month.toInt, day.toInt, hour.toInt, minute.toInt,0,0)
      case dateTimeMatch4(year, month, day, hour) => (year.toInt, month.toInt, day.toInt, hour.toInt,0,0,0 )

      case _ => (now.getYear,now.getMonthValue,now.getDayOfMonth,0,0,0,0)
    }

    LocalDateTime.of(year, month, day, hour, minute, second,nanoSecond).atZone(ZoneId.systemDefault()).toInstant.toEpochMilli

  }

This is working fine but I'm looking for better way. Anyone please help me

Muhunthan
  • 413
  • 2
  • 5
  • 15
  • See http://stackoverflow.com/questions/3389348/parse-any-date-in-java for a similar question in Java, most answers should apply here too. – Tzach Zohar Feb 07 '17 at 08:59
  • @TzachZohar Thanks for your comment. I actually advised to stick with LocalDate library – Muhunthan Feb 07 '17 at 09:02

0 Answers0