Probably depends on how much they play in actual games. Typically starters end up happy, if he’s on the bench it might never get to neutral or above. There’s 2 steps to that from very unhappy, to just unhappy, then at neutral they will negotiate
I would say generally a season, two at most. But you could also be able to sign them back during the season. I don't think there's been much tracking of player happiness and the time it takes
Very unhappy might be never, at least longer than a player just unhappy. I think it varies from player to player as that's been my overall experience re-signing ex players who were unhappy/very unhappy.
If the player is good, he'll stay mad at you longer. I have found that I can cut and re-sign fringe players nearly at will. Also, longtime backups can sometimes get mad at you no matter what.