为什么datetime.fromtimestamp(time / 1e3)会导致java.util.GregorianCalendar?

时间:2018-08-02 22:25:40

标签: python pyspark

我有一个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=?]

我该如何解决?

1 个答案:

答案 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