As an alternative to ALs excellent answer: you could:
- send a data message with FCM straight away,
- in that message include a field with when the message is to be displayed,
- them in your application code show the message when it is due.
This has the added advantage that the message can be delivered when the user has a connection, and then displayed when they don't have a network connection.
Of course this only works if you can determine the exact message before it is displayed. If the contents of the message can only be known right before it is displayed, you will need to implement your own mechanism to schedule deliver as AL said in his answer.