我有一个Spark作业,其中包含这样的UDF:
def checkTimeRange(etime):
date = datetime.datetime.fromtimestamp(etime / 1e3)
if datetime.datetime(2018, 7, 26, 8, 00, 00) < date < datetime.datetime(2018, 7, 25, 9, 00, 00):
return True
else:
return False
我检查事件时间是否在一个范围内,并相应地返回True或False。 etime是int类型的(例如:1532609527000),但是日期看起来是这样的格式:
|java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id="US/Pacific-New",offset=-28800000,dstSavings=3600000,useDaylight=true,transitions=185,lastRule=java.util.SimpleTimeZone[id=US/Pacific-New,offset=-28800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=?,YEAR=2018,MONTH=6,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=26,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=5,HOUR_OF_DAY=5,MINUTE=52,SECOND=7,MILLISECOND=0,ZONE_OFFSET=?,DST_OFFSET=?]
我该如何解决?
答案 0 :(得分:0)
unixtype时间戳是从日期1970年1月1日开始经过的时间(以秒为单位)。因此,您必须将etime转换为普通格式,或者将比较日期转换为unixtimestamp。这是将Unix时间戳转换为正常的年,月,日,hhmmss格式的方法。 希望对您有所帮助。
def unixtodate(utime):
import datetime
current=datetime.datetime(1970,01,01,00,00,00)+datetime.timedelta(seconds=utime)
current=current.isoformat()
return current