convertTimezone
Convert date and time between timezones using Luxon library. Input ISO 8601 date, source, and target timezone (IANA identifier); specify output format (full, date, time, iso). Simplify timezone transformations.
Instructions
Convert date/time between timezones using Luxon
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date/time string to convert (ISO 8601 format) | |
| format | No | Output format (full, date, time, iso) | full |
| fromTZ | Yes | Source timezone (IANA timezone identifier) | |
| toTZ | Yes | Target timezone (IANA timezone identifier) |
Implementation Reference
- src/tools/datetime.ts:32-96 (handler)The main handler function that parses the input date in source timezone, converts it to target timezone using Luxon DateTime, formats the output according to specified format, and returns a structured TimezoneConversionResult as JSON.handler: async ({ date, fromTZ, toTZ, format = 'full' }: { date: string; fromTZ: string; toTZ: string; format?: 'full' | 'date' | 'time' | 'iso' }) => { try { const dt = DateTime.fromISO(date, { zone: fromTZ }); if (!dt.isValid) { throw new Error(`Invalid date format or timezone: ${dt.invalidReason}`); } const converted = dt.setZone(toTZ); if (!converted.isValid) { throw new Error(`Invalid target timezone: ${converted.invalidReason}`); } let formattedOriginal: string; let formattedConverted: string; switch (format) { case 'full': formattedOriginal = dt.toLocaleString(DateTime.DATETIME_FULL); formattedConverted = converted.toLocaleString(DateTime.DATETIME_FULL); break; case 'date': formattedOriginal = dt.toLocaleString(DateTime.DATE_FULL); formattedConverted = converted.toLocaleString(DateTime.DATE_FULL); break; case 'time': formattedOriginal = dt.toLocaleString(DateTime.TIME_WITH_SECONDS); formattedConverted = converted.toLocaleString(DateTime.TIME_WITH_SECONDS); break; case 'iso': formattedOriginal = dt.toISO(); formattedConverted = converted.toISO(); break; default: throw new Error(`Unsupported format: ${format}`); } const result: TimezoneConversionResult = { originalDate: formattedOriginal, convertedDate: formattedConverted, fromTimezone: fromTZ, toTimezone: toTZ }; return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; } catch (error) { throw new Error(`Timezone conversion failed: ${error instanceof Error ? error.message : 'Unknown error'}`); } }
- src/tools/datetime.ts:8-31 (schema)Input schema (JSON Schema) defining the required parameters: date (ISO string), fromTZ and toTZ (IANA identifiers), and optional format (full|date|time|iso).inputSchema: { type: 'object', properties: { date: { type: 'string', description: 'Date/time string to convert (ISO 8601 format)' }, fromTZ: { type: 'string', description: 'Source timezone (IANA timezone identifier)' }, toTZ: { type: 'string', description: 'Target timezone (IANA timezone identifier)' }, format: { type: 'string', description: 'Output format (full, date, time, iso)', enum: ['full', 'date', 'time', 'iso'], default: 'full' } }, required: ['date', 'fromTZ', 'toTZ'] },
- src/index.ts:28-35 (registration)Spreads dateTimeTools (containing convertTimezone) into the allTools registry, which is used by the MCP server to list and execute tools.const allTools: ToolKit = { ...systemTools, ...networkTools, ...geoTools, ...generatorTools, ...dateTimeTools, ...securityTools };
- src/types.ts:46-51 (schema)TypeScript interface defining the structure of the TimezoneConversionResult output from the handler.export interface TimezoneConversionResult { originalDate: string; convertedDate: string; fromTimezone: string; toTimezone: string; }