From GM Office >> Help >> FAQ, then scroll down to "Players" section:
*****************************************************
"How does a player gain big league years of experience? Is service time a part of it?"
"Yes. We track service time in days. It is viewable by hovering over the ML Years value on a player's profile. Each day a player is on the big league roster during the regular season (even if he's on the DL), he accrues a day of service. In addition, we track the # of days a player is on optional assignment on a minor league team. If a player is on optional assignment less than 20 days during the season, this total is added to his big league service time. At the end of the season, if a player has 172 days or more (including any optional service days < 20), he is given a year of big league experience. If not, the days roll over into the next season. These years are what dictate arbitration eligibility and free-agent eligibility."
It is important to note that a player registers days on optional assignment only after the minor league schedule has begun. There is typically a 1 or 2 HBD day difference between when the big league schedule starts and when the minor league schedule starts.
******************************************************
So, as long as your guy gets 20 days in AAA and you then promote him, he won't accrue a year of ML service time. By the way, those 20 days don't have to be consecutive, or at the beginning of the season. Every time I've done it, the player's AAA schedule had an off day in the first 20 (so I think that's the case all the time), so I've promoted after 19 games/20 days. That's always worked, but give it another day or 2 cushion if you're unsure.
This question gets asked a lot, and the thing people miss that creates confusion is that it's 20 MINOR LEAGUE DAYS. Count the minor league days...if they add up to 20, you're safe.