You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
285 lines
6.9 KiB
285 lines
6.9 KiB
# Time Implementation — Technical Instructions
|
|
|
|
> **Agent role**: Reference this file for detailed implementation instructions
|
|
when working with time handling in development.
|
|
|
|
## Real-Time Context in Developer Interactions
|
|
|
|
- The model must always resolve **"current time"** using the **developer's
|
|
|
|
actual system time and timezone**.
|
|
|
|
- When generating timestamps (e.g., in investigation logs, ADRs, or examples),
|
|
|
|
the model should:
|
|
|
|
- Use the **developer's current local time** by default.
|
|
|
|
- Indicate the timezone explicitly (e.g., `2025-08-17T10:32-05:00`).
|
|
|
|
- Optionally provide UTC alongside if context requires cross-team clarity.
|
|
|
|
- When interpreting relative terms like *now*, *today*, *last week*:
|
|
|
|
- Resolve them against the **developer's current time**.
|
|
|
|
- Convert them into **absolute ISO-8601 values** in the output.
|
|
|
|
## LLM Time Checking Instructions
|
|
|
|
**CRITICAL**: The LLM must actively query the system for current time rather
|
|
than assuming or inventing times.
|
|
|
|
### How to Check Current Time
|
|
|
|
#### 1. **Query System Time (Required)**
|
|
|
|
- **Always start** by querying the current system time using available tools
|
|
|
|
- **Never assume** what the current time is
|
|
|
|
- **Never use** placeholder values like "current time" or "now"
|
|
|
|
#### 2. **Available Time Query Methods**
|
|
|
|
- **System Clock**: Use `date` command or equivalent system time function
|
|
|
|
- **Programming Language**: Use language-specific time functions (e.g.,
|
|
|
|
`Date.now()`, `datetime.now()`)
|
|
|
|
- **Environment Variables**: Check for time-related environment variables
|
|
|
|
- **API Calls**: Use time service APIs if available
|
|
|
|
#### 3. **Required Time Information**
|
|
|
|
When querying time, always obtain:
|
|
|
|
- **Current Date**: YYYY-MM-DD format
|
|
|
|
- **Current Time**: HH:MM:SS format (24-hour)
|
|
|
|
- **Timezone**: Current system timezone or UTC offset
|
|
|
|
- **UTC Equivalent**: Convert local time to UTC for cross-team clarity
|
|
|
|
#### 4. **Time Query Examples**
|
|
|
|
```bash
|
|
|
|
# Example: Query system time
|
|
|
|
$ date
|
|
|
|
# Expected output: Mon Aug 17 10:32:45 EDT 2025
|
|
|
|
# Example: Query UTC time
|
|
|
|
$ date -u
|
|
|
|
# Expected output: Mon Aug 17 14:32:45 UTC 2025
|
|
|
|
```
|
|
|
|
```python
|
|
|
|
# Example: Python time query
|
|
|
|
import datetime
|
|
current_time = datetime.datetime.now()
|
|
utc_time = datetime.datetime.utcnow()
|
|
print(f"Local: {current_time}")
|
|
print(f"UTC: {utc_time}")
|
|
|
|
```
|
|
|
|
```javascript
|
|
|
|
// Example: JavaScript time query
|
|
const now = new Date();
|
|
const utc = new Date().toISOString();
|
|
console.log(`Local: ${now}`);
|
|
console.log(`UTC: ${utc}`);
|
|
|
|
```
|
|
|
|
#### 5. **LLM Time Checking Workflow**
|
|
|
|
1. **Query**: Actively query system for current time
|
|
|
|
2. **Validate**: Confirm time data is reasonable and current
|
|
|
|
3. **Format**: Convert to ISO 8601 format
|
|
|
|
4. **Context**: Provide both local and UTC times when helpful
|
|
|
|
5. **Document**: Show the source of time information
|
|
|
|
#### 6. **Error Handling for Time Queries**
|
|
|
|
- **If time query fails**: Ask user for current time or use "unknown time"
|
|
|
|
with explanation
|
|
|
|
- **If timezone unclear**: Default to UTC and ask for clarification
|
|
|
|
- **If time seems wrong**: Verify with user before proceeding
|
|
|
|
- **Always log**: Record when and how time was obtained
|
|
|
|
#### 7. **Time Query Verification**
|
|
|
|
Before using queried time, verify:
|
|
|
|
- [ ] Time is recent (within last few minutes)
|
|
|
|
- [ ] Timezone information is available
|
|
|
|
- [ ] UTC conversion is accurate
|
|
|
|
- [ ] Format follows ISO 8601 standard
|
|
|
|
## Model Behavior Rules
|
|
|
|
- **Never invent a "fake now"**: All "current time" references must come from
|
|
|
|
the real system clock available at runtime.
|
|
|
|
- **Check developer time zone**: If ambiguous, ask for clarification (e.g.,
|
|
|
|
"Should I use UTC or your local timezone?").
|
|
|
|
- **Format for clarity**:
|
|
|
|
- Local time: `YYYY-MM-DDTHH:mm±hh:mm`
|
|
|
|
- UTC equivalent (if needed): `YYYY-MM-DDTHH:mmZ`
|
|
|
|
## Technical Implementation Notes
|
|
|
|
### UTC Storage Principle
|
|
|
|
- **Store all timestamps in UTC** in databases, logs, and serialized formats
|
|
|
|
- **Convert to local time only for user display**
|
|
|
|
- **Use ISO 8601 format** for all storage: `YYYY-MM-DDTHH:mm:ss.sssZ`
|
|
|
|
### Common Implementation Patterns
|
|
|
|
#### Database Storage
|
|
|
|
```sql
|
|
|
|
-- ✅ Good: Store in UTC
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
|
|
```
|
|
|
|
#### API Responses
|
|
|
|
```json
|
|
|
|
// ✅ Good: Include both UTC and local time
|
|
{
|
|
"eventTime": "2025-08-17T14:00:00Z",
|
|
"localTime": "2025-08-17T10:00:00-04:00",
|
|
"timezone": "America/New_York"
|
|
}
|
|
|
|
```
|
|
|
|
#### Logging
|
|
|
|
```python
|
|
|
|
# ✅ Good: Log in UTC with timezone info
|
|
|
|
logger.info(f"User action at {datetime.utcnow().isoformat()}Z (UTC)")
|
|
|
|
```
|
|
|
|
### Timezone Handling Best Practices
|
|
|
|
#### 1. Always Store Timezone Information
|
|
|
|
- Include IANA timezone identifier (e.g., `America/New_York`)
|
|
|
|
- Store UTC offset at time of creation
|
|
|
|
- Handle daylight saving time transitions automatically
|
|
|
|
#### 2. User Display Considerations
|
|
|
|
- Convert UTC to user's preferred timezone
|
|
|
|
- Show timezone abbreviation when helpful
|
|
|
|
- Use relative time for recent events ("2 hours ago")
|
|
|
|
#### 3. Edge Case Handling
|
|
|
|
- **Daylight Saving Time**: Use timezone-aware libraries
|
|
|
|
- **Leap Seconds**: Handle gracefully (rare but important)
|
|
|
|
- **Invalid Times**: Validate before processing
|
|
|
|
### Common Mistakes to Avoid
|
|
|
|
#### 1. Timezone Confusion
|
|
|
|
- ❌ **Don't**: Assume server timezone is user timezone
|
|
|
|
- ✅ **Do**: Always convert UTC to user's local time for display
|
|
|
|
#### 2. Format Inconsistency
|
|
|
|
- ❌ **Don't**: Mix different time formats in the same system
|
|
|
|
- ✅ **Do**: Standardize on ISO 8601 for all storage
|
|
|
|
#### 3. Relative Time References
|
|
|
|
- ❌ **Don't**: Use relative terms in persistent storage
|
|
|
|
- ✅ **Do**: Convert relative terms to absolute timestamps immediately
|
|
|
|
---
|
|
|
|
**See also**:
|
|
|
|
- `.cursor/rules/development/time.mdc` for core principles
|
|
|
|
- `.cursor/rules/development/time_examples.mdc` for practical examples
|
|
|
|
**Status**: Active implementation guidelines
|
|
**Priority**: Medium
|
|
**Estimated Effort**: Ongoing reference
|
|
**Dependencies**: time.mdc
|
|
**Stakeholders**: Development team, DevOps team
|
|
|
|
## Model Implementation Checklist
|
|
|
|
### Before Time Implementation
|
|
|
|
- [ ] **Time Context**: Understand what time information needs to be implemented
|
|
- [ ] **Format Review**: Review time formatting standards (UTC, ISO 8601)
|
|
- [ ] **Platform Check**: Identify platform-specific time requirements
|
|
- [ ] **User Context**: Consider user's timezone and display preferences
|
|
|
|
### During Time Implementation
|
|
|
|
- [ ] **UTC Storage**: Use UTC for all system and log timestamps
|
|
- [ ] **Format Consistency**: Apply consistent time formatting patterns
|
|
- [ ] **Timezone Handling**: Properly handle timezone conversions
|
|
- [ ] **User Display**: Format times appropriately for user display
|
|
|
|
### After Time Implementation
|
|
|
|
- [ ] **Format Validation**: Verify time formats are correct and consistent
|
|
- [ ] **Cross-Platform Testing**: Test time handling across different platforms
|
|
- [ ] **Documentation**: Update relevant documentation with time patterns
|
|
- [ ] **User Experience**: Confirm time display is clear and user-friendly
|
|
|