Spaces:
Sleeping
Sleeping
| 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="<html></html>", 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() | |