In the ALTER TABLE statement, the new column name must be supplied like any other identifier in the SQL text.
The new name for the column cannot be supplied as the return from a function, or as bind placeholder. It has to be supplied as an identifier.
That is, the SQL statement you submit to the database will need to have the new column name actually spelled out, as part of the statement:
ALTER TABLE table_name CHANGE old_column_name new_column_name DATE
So, the short answer to your question is no, it can't be done in a single SQL statement.
Obviously, you can perform operations in separate steps, to get the current date, and to create a string containing SQL statement you want to execute. IT seems like you would also need to identify the current name of the column you want to change.
Beyond the question that was asked...
I'm having difficulty fathoming a use case where something like this would be an appropriate solution.
What problem is this type of functionality attempting to solve? Why would you need the name of the column changed. Any SQL statements that reference the column will also need to be changed. Could you store this "date" as a value in a row of another table?
The only thing I can think why someone would want to do this would be a misguided attempt to specify a column name in a resultset from a SELECT * query.