| 
					
				 | 
			
			
				@@ -0,0 +1,48 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from datetime import datetime 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from typing import Any, Union 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import pytz 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from core.tools.entities.tool_entities import ToolInvokeMessage 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from core.tools.errors import ToolInvokeError 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from core.tools.tool.builtin_tool import BuiltinTool 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+class TimezoneConversionTool(BuiltinTool): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _invoke( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        self, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        user_id: str, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        tool_parameters: dict[str, Any], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Convert time to equivalent time zone 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        current_time = tool_parameters.get("current_time") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        current_timezone = tool_parameters.get("current_timezone", "Asia/Shanghai") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        target_timezone = tool_parameters.get("target_timezone", "Asia/Tokyo") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        target_time = self.timezone_convert(current_time, current_timezone, target_timezone) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if not target_time: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return self.create_text_message( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                f"Invalid datatime and timezone: {current_time},{current_timezone},{target_timezone}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return self.create_text_message(f"{target_time}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @staticmethod 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def timezone_convert(current_time: str, source_timezone: str, target_timezone: str) -> str: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Convert a time string from source timezone to target timezone. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        time_format = "%Y-%m-%d %H:%M:%S" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # get source timezone 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            input_timezone = pytz.timezone(source_timezone) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # get target timezone 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            output_timezone = pytz.timezone(target_timezone) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            local_time = datetime.strptime(current_time, time_format) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            datetime_with_tz = input_timezone.localize(local_time) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # timezone convert 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            converted_datetime = datetime_with_tz.astimezone(output_timezone) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return converted_datetime.strftime(format=time_format) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        except Exception as e: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            raise ToolInvokeError(str(e)) 
			 |