Juche era converter
Turn a Gregorian year into a Juche year and back: 2024 is Juche 113. Enter a plain year or a full date, or start from a Juche year to get its Gregorian year. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Conversion direction
- gregorian_to_juche
- Year
- 2,024
- Gregorian year
- 2,024
- Juche year
- 113
Convert Gregorian years or dates to Juche era years and reverse with pure deterministic logic. Free, private, no account required in your browser.
How Juche years are counted
The Juche calendar counts years from nineteen twelve, which is Juche year 1, and every later year keeps the same fixed offset of one thousand nine hundred eleven. That makes the conversion a single subtraction: 2024 minus that offset is Juche 113. Going the other way takes a single addition. There is no Juche year zero and no negative Juche year, so the count begins at 1 and only moves forward. You can start from a plain year or from a full date; with a date only the year is used, so any day of 2024 gives Juche 113.
When it helps and the usual slips
Reference desks meet Juche years in published texts, and readers need the Gregorian year to place an event on a familiar timeline; anyone keeping a timeline in a spreadsheet also needs the same number every time. The most common slip is subtracting nineteen twelve instead of one thousand nine hundred eleven, which leaves every answer one year short. Another is expecting a day and month back from a Juche year, but the reverse direction returns a year only, because the Juche number carries no date. Years before nineteen twelve and decimal values are refused, so a mistyped cell cannot turn into a false Juche year.
What you can do with it
Reference desks
Translate published Juche years into Gregorian years for readers.
Automation
Call the same pure function from scripts that normalize timelines.
FAQ
Is this free?
Yes. Tier A runs entirely in your browser without an account.
How do I convert a Gregorian year to a Juche year?
Subtract one thousand nine hundred eleven from the Gregorian year. The Juche calendar counts nineteen twelve as year 1, so every later year keeps that same offset.
Can I enter a full date instead of a year?
Yes. Type the date as year-month-day and the converter takes the year from it; the day and month do not change the result. The date you typed is shown again next to the answer.
Does the reverse conversion give me an exact day?
No. Going from a Juche year back to the Gregorian calendar returns only the year, because a Juche year number says nothing about the day or month. Enter a whole number of 1 or more.
What happens with years before nineteen twelve?
They are rejected. Those years would give a Juche year below 1, which does not exist because the count starts at year 1. Years with decimals are refused as well.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/date/juche \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"direction":"gregorian_to_juche","year":2024}'const res = await fetch("https://api.kit.forhosting.com/date/juche", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"direction": "gregorian_to_juche",
"year": 2024
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/juche",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"direction": "gregorian_to_juche",
"year": 2024
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/juche", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"direction":"gregorian_to_juche","year":2024}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"direction":"gregorian_to_juche","year":2024}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/juche", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"direction": "gregorian_to_juche",
"year": 2024
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.juche",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
How the Juche era offset works
Values that would produce a Juche year less than one are rejected because they fall before the era start. The Juche calendar numbers years from nineteen twelve as year one, so the integer mapping is simply gregorian_year minus one thousand nine hundred eleven. Direction gregorian_to_juche accepts either an integer year field or a Gregorian date string formatted as four-digit year, hyphen, month, hyphen, day; when date is supplied the year is taken from the first four characters. The success payload returns direction, gregorian_year, juche_year, and the original date when it was provided so UI bindings stay stable across both input styles.
Reverse conversion and validation
The optional date field is echoed only in the forward direction when it was present; reverse mode does not invent a civil day. Direction juche_to_gregorian requires juche_year as an integer greater than or equal to one and returns gregorian_year as juche_year plus one thousand nine hundred eleven. Missing year and date together, non-integer years, and unknown direction strings raise clear invalid_input errors with stable English message fragments the certification harness can match.
Determinism, limits, and integration
The implementation is pure parse-tier arithmetic with no network, clocks, or randomness, so identical inputs always produce identical outputs. Extremely large years remain ordinary IEEE integers until they overflow the platform number type; document that contract if you store century-scale values. Review the published schema for direction, year, juche_year, and date before wiring metrics, and bind only the documented success keys.
Integration use cases
Teaching demos
Show the simple offset with golden fixtures that match the free widget.
Technical questions
Does it call the network?
No. The parse engine keeps everything on-device.
What if my input is invalid?
You receive invalid_input with a clear English message.
Are results stable?
Yes. Deterministic math and golden examples freeze the contract.
Who authors this capacity?
Aspire on the ForHosting KIT workshop.