元封元年(公元前110年),五十六歲的司馬談在周南(洛陽)病死,漢朝太史令的職位暫時空缺。當年司馬遷已三十六歲。他跟從武帝封禪泰山後,就依照古代的行孝製度,辭掉一切官職,回到茂陵縣顯武裏,為父親守喪三年。但在守喪期間,他仍然奉旨扈從巡遊。
元封三年(公元前108年),三十八歲的司馬遷守喪期滿,又出來做官,繼承他父親的職位,為太史令。太史令是周代的太祝、太史、太卜三項官職合而為一的職位。所以,太史令的工作範圍很廣,既要掌握祭祀的禮儀,又要製訂日常的世俗禮節;不但要奉事皇帝等在世之人,而且要奉祀鬼神;既記錄人間的事(文史),也記錄天上的事(星曆),古代史官與曆官是不分的。
太史令的職位和郎中不同的地方是:工作場所由內廷轉到外廷,不能時刻接近武帝。但因太史令職掌天官,具有“文史星曆”的專業知識,所以司馬遷還必須隨時備召為皇帝當顧問,並且跟從漢武帝封禪祭禮山川百神,仍可接近漢武帝。
司馬遷做了太史令後,可以堂皇正大地在皇室圖書館裏翻閱石室金匱之書,整理一切秘籍和曆史資料,接續父親已經開創的事業,從事撰述《史記》的偉大工作。
唐朝以後,史官才有編修史書的任務。漢代的史官在寫作方麵的工作隻有兩項:首先是掌管星曆(記天事),其次是記人事,也就是記錄皇帝、大臣和當代精英的言論,以及記錄皇帝、大臣和當代精英的事跡,他們所記下來的皇帝、大臣和當代精英的言論和事跡,隻需作為史料存檔,不需要編撰成編年史或紀傳體的史書。所以司馬遷擔任太史令,並沒有編修國家史書的任務,他撰寫的《史記》和孔子作的《春秋》一樣,都屬於私家著作。
但太史令這個職務,是司馬遷完成《史記》不可或缺的條件。因為這時的太史令除宗教方麵的職責以外,還負責保管官方典藏的文書和朝廷搜尋到的曆代史料。又因為要負責記載當代時事,規定國家各級政府的政務報告在呈送宰相之前,要先送給太史令看,以為記錄的依據。而這些東西都是寫史所必需的材料,也是民間人士和一般官吏無法接觸,隻有擔任太史令的官員才能看到的秘籍,所以說司馬遷惟有擔任太史令之職,才有辦法或較有可能寫成《史記》。
從元封三年(公元前108年)開始任太史令起,到太始四年(公元前93年)作《報任安書》,標誌《史記》基本完稿為止,總共十六年時光。這是司馬遷嘔心瀝血撰述《史記》的十六年。這十六年間,局勢發生了重大變化,漢王朝由盛轉衰,司馬遷個人從製定太初曆到遭受李陵之禍,人生旅途也發生了重大轉折。
我國自古以農立國,因而很早就產生了天文學和曆算學,很早就製定出比較適用的曆法。春秋時曆法已相當完整,已定出安排閏年的規則。戰國時,各諸侯國有各自的曆法,流行的曆法有黃帝、顓頊、夏、殷、周、魯六種,被稱為“古六曆”。這些曆法都是以三百六十五又四分之一天為一回歸年——即“四分曆”,但歲首(即一年開始的月份)不同。秦始皇統一後,用顓頊曆,以孟冬為歲首。漢朝初年沿用秦朝曆法。顓頊曆不夠精密,沿用既久,便產生了曆法和天象不相適應的情況,因而有改正的必要。司馬遷身為太史令,天文、曆法本是他職責之內的事,於是由司馬遷、壺遂等建議開始了改曆工作。當時還招募了民間曆法家二十多人參加,其中包括著名的天文學家唐都、落下閎、鄧平等。
元封七年(公元前104年)十月,司馬遷經過夜以繼日的努力,終於完成了一部新曆。這一年的十一月朔日早晨是冬至,又正好是甲子日的開始,他就把這部新曆命名為《曆術甲子篇》。經過反複審查,他才把《曆術甲子篇》交給太常趙弟。
出乎他的意料,參加改曆的民間曆法家鄧平也同時編製了一部新曆。鄧平是以黃鍾律長九寸,圍長九分,以圍乘長,得八十一寸,然後以八十一為分母,推算出一個月的日期是二十九日八十一分之四十三。因為這個緣故,他的曆書稱為《八十一分律曆》。不僅如此,鄧平還推算出,在甲子夜半朔日早晨冬至時,會出現日月合璧、五星連珠的天象。
太常趙弟很快將這兩部新曆奏報到朝廷,太中大夫公孫卿支持司馬遷的《曆術甲子篇》,他啟奏武帝說:“十一月甲子日是朔日,早晨正好交冬至,太史令以這一天推原統紀,與黃帝成仙的情況相合,這一切都是泰一的安排。”