Yes, as you mentioned we need to use assetManager.createRevision() to create initial version of asset before replacing content of Asset A by Asset B. please check below code which will create version & replace content as expected.
Each time a page/asset is modified cq creates a version of the same. This modified resource modification time is set in jcr:lastModified property of the page/asset. Manipulation of this property can be done to save future date and activate page on that date though its not preferred way. You can store the future date as a property in the page/asset. Then you could write a workflow or a scheduled job which activates pages/assets with a future date.