Most likely, your BoundBox.Intersects() function never returns TRUE. Probably because your collision response has already been applied somewhere in another part of your code, which pushes the bounding boxes away from each other? Then you need to figure out another way to detect collisions.
And if that's not it, then it's most definitely because your "float time" variable is not static or global, so it gets set to 0 every frame (or every time you call the Attack() function), and then to the elapsed frame time, instead of accumulating the time since the collision was detected.
Also, you shouldn't use floating point variables for storing time values, since most of the system functions return time values as an unsigned integer. If you convert the system's time values to float, aside from that extra conversion, you're also just throwing away bits of precision, and forcing floating point operations where integer operations would be sufficient (and faster).