Things I would do slightly differently:
- Use a separate variable for the DIARY location (reusing variables for different things can be confusing)
- Return text from weather() instead of printing within the subroutine (do your printing all in one place)
- Create a timestamp() subroutine to format the times nicely
- (some time in the future) Create a separate get_diary_text() subroutine so you can add different entry methods as Elgon suggests
Nothing scares me about what you have now. It's solid code.