diff --git a/uni_modules/native-time-picker/components/time-picker/time-picker.uvue b/uni_modules/native-time-picker/components/time-picker/time-picker.uvue
new file mode 100644
index 0000000000000000000000000000000000000000..50fa1e6112efa00f1a6509cb6466dc351b10b283
--- /dev/null
+++ b/uni_modules/native-time-picker/components/time-picker/time-picker.uvue
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/native-time-picker/package.json b/uni_modules/native-time-picker/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..9d5b19a4104fd0c886fa159eb19b6e79d3908a83
--- /dev/null
+++ b/uni_modules/native-time-picker/package.json
@@ -0,0 +1,83 @@
+{
+ "id": "uni-time-picker",
+ "displayName": "uni-time-picker",
+ "version": "1.0.0",
+ "description": "uni-time-picker",
+ "keywords": [
+ "uni-time-picker"
+],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "dcloudext": {
+ "type": "component-vue",
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "",
+ "data": "",
+ "permissions": ""
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "u",
+ "aliyun": "u",
+ "alipay": "u"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "u",
+ "vue3": "u"
+ },
+ "App": {
+ "app-vue": "u",
+ "app-nvue": "u",
+ "app-uvue": "u"
+ },
+ "H5-mobile": {
+ "Safari": "u",
+ "Android Browser": "u",
+ "微信浏览器(Android)": "u",
+ "QQ浏览器(Android)": "u"
+ },
+ "H5-pc": {
+ "Chrome": "u",
+ "IE": "u",
+ "Edge": "u",
+ "Firefox": "u",
+ "Safari": "u"
+ },
+ "小程序": {
+ "微信": "u",
+ "阿里": "u",
+ "百度": "u",
+ "字节跳动": "u",
+ "QQ": "u",
+ "钉钉": "u",
+ "快手": "u",
+ "飞书": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/native-time-picker/readme.md b/uni_modules/native-time-picker/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..c119a2a8c3e540323de5674ecbee0a92a1027689
--- /dev/null
+++ b/uni_modules/native-time-picker/readme.md
@@ -0,0 +1 @@
+# uni-time-picker
\ No newline at end of file
diff --git a/uni_modules/native-time-picker/utssdk/app-android/config.json b/uni_modules/native-time-picker/utssdk/app-android/config.json
new file mode 100644
index 0000000000000000000000000000000000000000..bf9592567f563664ee930692b3282879db6d5007
--- /dev/null
+++ b/uni_modules/native-time-picker/utssdk/app-android/config.json
@@ -0,0 +1,3 @@
+{
+ "minSdkVersion": "21"
+}
\ No newline at end of file
diff --git a/uni_modules/native-time-picker/utssdk/app-ios/config.json b/uni_modules/native-time-picker/utssdk/app-ios/config.json
new file mode 100644
index 0000000000000000000000000000000000000000..33128280047aec14037956c90de097dc72b33486
--- /dev/null
+++ b/uni_modules/native-time-picker/utssdk/app-ios/config.json
@@ -0,0 +1,3 @@
+{
+ "deploymentTarget": "12"
+}
diff --git a/uni_modules/native-time-picker/utssdk/app-ios/index.uts b/uni_modules/native-time-picker/utssdk/app-ios/index.uts
new file mode 100644
index 0000000000000000000000000000000000000000..90abdc1526d9ae737764917e19f92de80045fe8e
--- /dev/null
+++ b/uni_modules/native-time-picker/utssdk/app-ios/index.uts
@@ -0,0 +1,85 @@
+import { UIDatePicker, UIControl, UIDatePickerStyle } from "UIKit"
+import { DateFormatter } from "CoreFoundation"
+
+export class NativeTimePicker {
+
+ element : UniNativeViewElement
+ timePicker : UIDatePicker
+ h : number
+ m : number
+
+ constructor(element : UniNativeViewElement, hour : number, minute : number) {
+ this.element = element
+ this.timePicker = new UIDatePicker()
+ this.h = hour
+ this.m = minute
+ super.init()
+
+ // 在 swift target-action 对应的方法需要以OC的方式来调用,那么OC语言中用Selector来表示一个方法的名称(又称方法选择器),创建一个Selector可以使用 Selector("functionName") 的方式。
+ const method = Selector("timeChange")
+ // 监听时间变化回调
+ this.timePicker.addTarget(this, action = method, for = UIControl.Event.valueChanged)
+
+ // 设置为时间选择模式
+ this.timePicker.datePickerMode = UIDatePicker.Mode.time
+
+ // 设置外观样式为 wheels
+ if (UTSiOS.available("iOS 13.4, *")) {
+ this.timePicker.preferredDatePickerStyle = UIDatePickerStyle.wheels
+ }
+
+ this.updateTime()
+ this.bindView(hour, minute)
+ }
+
+ // element 绑定原生view
+ bindView(hour : number, minute : number) {
+ this.element.bindIOSView(this.timePicker);
+ }
+
+ // 设置时
+ setHour(hour : number) {
+ this.h = hour
+ this.updateTime()
+ }
+
+ // 设置分
+ setMinute(minute : number) {
+ this.m = minute
+ this.updateTime()
+ }
+
+ // 更新显示
+ updateTime() {
+ let formatter = DateFormatter()
+ formatter.dateFormat = "HH:mm"
+ let date = formatter.date(from = `${this.h}:${this.m}`)
+ if (date != null) {
+ this.timePicker.date = date!
+ }
+ }
+
+ /**
+ * 按钮点击回调方法
+ * 在 swift 中,所有target-action (例如按钮的点击事件,NotificationCenter 的通知事件等)对应的 action 函数前面都要使用 @objc 进行标记。
+ */
+ @objc timeChange() {
+ // 发送事件
+ console.log("timeChange")
+
+ let formatter = DateFormatter()
+ formatter.dateFormat = "HH"
+ let hourString = formatter.string(from = this.timePicker.date)
+
+ formatter.dateFormat = "mm"
+ let minuteString = formatter.string(from = this.timePicker.date)
+
+ const detail = { "hour": hourString, "minute": minuteString }
+ const event = new UniNativeViewEvent("timechanged", detail)
+ this.element.dispatchEvent(event)
+ }
+
+ destroy() {
+ UTSiOS.destroyInstance(this)
+ }
+}