5

I am using the following script to extract HH:mm:ss from a yyyy-MM-dd HH:mm:ss date format

import java.sql.Time

case class Transactions(creationTime: Time)

val formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

def parseTransac(line: String): (Transactions) = {
   val fields = line.split(',')
   val creationTime = new Time(formatter.parse(fields(0)).getTime())
   val transactions = Transactions(creationTime)
   (transactions)
}

So for instance 2009-01-15 15:45:23 will return 15:45:23.

How can I obtain the result in seconds (56723) instead of HH:mm:ss

eliasah
  • 39,588
  • 11
  • 124
  • 154
ulrich
  • 3,547
  • 5
  • 35
  • 49

3 Answers3

2

Based on Jesper's suggestion, here is the solution :

import java.sql.Time    

case class Transactions(creationSeconds: Int )

val formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

def parseTransac(line: String): (Transactions) = {
   val fields = line.split(',')
   val fullDateTime = new Time(formatter.parse(fields(0)).getTime())
   val creationTime = fullDateTime.toString.split(':')
   val creationSeconds = creationTime(0).toInt*3600 + creationTime(1).toInt*60 + creationTime(2).toInt
   val transactions = Transactions(creationSeconds)
   (transactions)
}

and here is another solution based on Dipankar's hint:

import java.sql.Time
import org.joda.time.DateTime

case class Transactions(creationTime: Int)

val formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

def parseTransac(line: String): (Transactions) = {
   val fields = line.split(',')
   val fullDatTime = new DateTime(formatter.parse(fields(0)).getTime())
   val fromMidnight = fullDatTime.withTimeAtStartOfDay()
   val duration = new Duration(fromMidnight, fullDatTime)
   val creationTime = duration.toStandardSeconds().getSeconds()
   val transactions = Transactions(creationTime)
   (transactions)
}
ulrich
  • 3,547
  • 5
  • 35
  • 49
1

You can also do this with simple regex.

case class Transactions(creationTime: Int)

val format = "\\d{4}-\\d{2}-\\d{2}\\s(\\d{1,2}):(\\d{1,2}):(\\d{1,2})".r

def parseTransac(line: String): (Transactions) = {
  val fields = line.split(',')

  val format(h, m, s) = fields(0)

  Transactions(s.toInt + m.toInt * 60 + h.toInt * 3600)
}
grzesiekw
  • 477
  • 4
  • 8
1

A quick one liner:

scala> "15:45:23".split(":").map(_.toInt).reduceLeft((x,y) => x*60 +y)
res0: Int = 56723
geo
  • 516
  • 5
  • 12