import json from datetime import datetime import pytz import time import gradio as gr js = """ function createGradioAnimation() { var container = document.createElement('div'); container.id = 'gradio-animation'; container.style.fontSize = '2em'; container.style.fontWeight = 'bold'; container.style.textAlign = 'center'; container.style.marginBottom = '20px'; var text = 'Welcome to Code Tools!'; for (var i = 0; i < text.length; i++) { (function(i){ setTimeout(function(){ var letter = document.createElement('span'); letter.style.opacity = '0'; letter.style.transition = 'opacity 0.5s'; letter.innerText = text[i]; container.appendChild(letter); setTimeout(function() { letter.style.opacity = '1'; }, 50); }, i * 250); })(i); } var gradioContainer = document.querySelector('.gradio-container'); gradioContainer.insertBefore(container, gradioContainer.firstChild); return 'Animation created'; } """ def json_format(data): try: data = json.loads(data) return data except: raise gr.Error("Json数据格式不正确!") def html_format(data): return data def md_format(data): return data # 获取当前 Unix 时间戳 def get_current_timestamp(precision): timestamp = int(time.time() * 1000) if precision == "ms" else int(time.time()) return str(timestamp) # 时间戳转换为日期 def timestamp_to_date(input_time, target_timezone, precision): try: if precision == "ms": input_time = int(input_time) / 1000 # 毫秒转为秒 else: input_time = int(input_time) # 秒级时间戳 # 将输入的 Unix 时间戳转换为 UTC 时间 utc_time = datetime.utcfromtimestamp(input_time).replace(tzinfo=pytz.utc) # 获取目标时区 target_tz = pytz.timezone(target_timezone) # 转换到目标时区 target_time = utc_time.astimezone(target_tz) # 返回格式化后的时间 return target_time.strftime("%Y-%m-%d %H:%M:%S") except Exception as e: return f"error: {e}" # 日期转换为时间戳 def date_to_timestamp(input_date, target_timezone): try: # 解析日期输入为 datetime 对象 target_tz = pytz.timezone(target_timezone) target_time = datetime.fromisoformat(input_date).astimezone(target_tz) # 转换为 UTC 时间戳 timestamp = int(target_time.astimezone(pytz.utc).timestamp()) return str(timestamp) except Exception as e: return f"error: {e}" # 获取所有时区列表 timezones = pytz.all_timezones with gr.Blocks(title='Gradio-Tools', theme=gr.themes.Ocean(), js=js) as demo: with gr.Tabs(): with gr.Tab("Json Format"): with gr.Row(): json_input = gr.Textbox(label="Json Data", interactive=True, placeholder="{}", lines=50) json_output = gr.Json(label="Json Format") json_input.change(fn=json_format, inputs=json_input, outputs=json_output) with gr.Tab("Timestamp Conversion"): with gr.Row(): # 时间戳输入框,显示当前时间戳 timestamp_input = gr.Textbox( label="Timestamp (s/ms)", value=get_current_timestamp("s"), # 默认显示当前秒级时间戳 interactive=True, # 可编辑 elem_id="timestamp_input", placeholder="Please enter a timestamp" ) # 选择精度(秒或毫秒) precision = gr.Dropdown( ["s", "ms"], label="Timestamp accuracy", value="s", # 默认秒 elem_id="precision" ) target_timezone = gr.Dropdown( timezones, label="Target time zone", value="Asia/Shanghai", # 默认设置为北京时间 elem_id="target_timezone" ) with gr.Row(): # 日期输入框,用户输入日期 date_input = gr.Textbox( label="Date Input (ISO 8601)", placeholder="For example:2025-01-01 12:34:56", elem_id="date_input" ) output = gr.Textbox(label="Conversion results", elem_id="output") with gr.Row(): # 时间戳转日期按钮 timestamp_to_date_btn = gr.Button("Timestamp to date", elem_id="timestamp_to_date_btn") # 日期转时间戳按钮 date_to_timestamp_btn = gr.Button("Date to timestamp", elem_id="date_to_timestamp_btn") # 精度选择改变时,动态更新时间戳显示 precision.change( lambda precision: get_current_timestamp(precision), inputs=precision, outputs=timestamp_input ) # 时间戳转日期按钮点击事件 def handle_timestamp_to_date(timestamp_input, target_timezone, precision): if timestamp_input: # 如果时间戳输入框有内容 return timestamp_to_date(timestamp_input, target_timezone, precision) return "Please enter a valid timestamp" timestamp_to_date_btn.click( handle_timestamp_to_date, inputs=[timestamp_input, target_timezone, precision], outputs=output ) # 日期转时间戳按钮点击事件 def handle_date_to_timestamp(date_input, target_timezone): if date_input: # 如果日期输入框有内容 return date_to_timestamp(date_input, target_timezone) return "Please enter a valid date" date_to_timestamp_btn.click( handle_date_to_timestamp, inputs=[date_input, target_timezone], outputs=output ) with gr.Tab("Html Rendering"): with gr.Row(): html_input = gr.Textbox(label="Html Data", interactive=True, placeholder="", lines=50) html_output = gr.HTML() html_input.change(fn=html_format, inputs=html_input, outputs=html_output) with gr.Tab("Markdown Rendering"): with gr.Row(): md_input = gr.Textbox(label="Markdown Data", interactive=True, placeholder="## title", lines=50) md_output = gr.Markdown() md_input.change(fn=md_format, inputs=md_input, outputs=md_output) demo.launch()