PurchaseTime should be long, otherwise it will overflow int