{"id":13396353,"url":"https://github.com/wdullaer/MaterialDateTimePicker","last_synced_at":"2025-03-13T23:30:52.174Z","repository":{"id":25325819,"uuid":"28752850","full_name":"wdullaer/MaterialDateTimePicker","owner":"wdullaer","description":"Pick a date or time on Android in style","archived":false,"fork":false,"pushed_at":"2022-08-23T14:10:14.000Z","size":2001,"stargazers_count":4668,"open_issues_count":111,"forks_count":950,"subscribers_count":109,"default_branch":"master","last_synced_at":"2024-10-29T15:28:12.339Z","etag":null,"topics":["android","android-library","material-design","picker"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wdullaer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":["wdullaer"]}},"created_at":"2015-01-03T19:41:03.000Z","updated_at":"2024-10-26T19:12:23.000Z","dependencies_parsed_at":"2022-07-13T10:30:28.954Z","dependency_job_id":null,"html_url":"https://github.com/wdullaer/MaterialDateTimePicker","commit_stats":null,"previous_names":[],"tags_count":54,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wdullaer%2FMaterialDateTimePicker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wdullaer%2FMaterialDateTimePicker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wdullaer%2FMaterialDateTimePicker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wdullaer%2FMaterialDateTimePicker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wdullaer","download_url":"https://codeload.github.com/wdullaer/MaterialDateTimePicker/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243393380,"owners_count":20283784,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-library","material-design","picker"],"created_at":"2024-07-30T18:00:46.853Z","updated_at":"2025-03-13T23:30:52.144Z","avatar_url":"https://github.com/wdullaer.png","language":"Java","funding_links":["https://github.com/sponsors/wdullaer"],"categories":["Index `(light-weight pages)`","Android","日历时间","Index","Libs"],"sub_categories":["Components","\u003cA NAME=\"Widget\"\u003e\u003c/A\u003eWidget"],"readme":"# Material DateTime Picker - Select a time/date in style\n\n[![Join the chat at https://gitter.im/wdullaer/MaterialDateTimePicker](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/wdullaer/MaterialDateTimePicker?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n![Maven Central](https://img.shields.io/maven-central/v/com.wdullaer/materialdatetimepicker.svg)\n![Build Status](https://travis-ci.org/wdullaer/MaterialDateTimePicker.svg?branch=master)\n\n\nMaterial DateTime Picker tries to offer you the date and time pickers as shown in [the Material Design spec](http://www.google.com/design/spec/components/pickers.html), with an\neasy themable API.\nThe library uses [the code from the Android frameworks](https://android.googlesource.com/platform/frameworks/opt/datetimepicker/) as a base and tweaked it to be as close as possible to Material Design example.\n\nSupport for Android 4.1 and up. (Android 4.0 was supported until 3.6.4)\n\nFeel free to fork or issue pull requests on github. Issues can be reported on the github issue tracker.\n\n**Version 2 Layout**\n\nDate Picker | Time Picker\n--- | ---\n![Date Picker](https://raw.github.com/wdullaer/MaterialDateTimePicker/gh-pages/images/date_picker_v2.png) | ![Time Picker](https://raw.github.com/wdullaer/MaterialDateTimePicker/gh-pages/images/time_picker_v2.png)\n\n**Version 1 Layout**\n\nDate Picker | Time Picker\n---- | ----\n![Date Picker](https://raw.github.com/wdullaer/MaterialDateTimePicker/gh-pages/images/date_picker.png) | ![Time Picker](https://raw.github.com/wdullaer/MaterialDateTimePicker/gh-pages/images/time_picker.png)\n\n\n## Table of Contents\n1. [Setup](#setup)\n2. [Using Material Date/Time Pickers](#using-material-datetime-pickers)\n1. [Implement Listeners](#implement-an-ontimesetlistenerondatesetlistener)\n2. [Create Pickers](#create-a-timepickerdialogdatepickerdialog-using-the-supplied-factory)\n3. [Theme the Pickers](#theme-the-pickers)\n3. [Additional Options](#additional-options)\n4. [FAQ](#faq)\n5. [Potential Improvements](#potential-improvements)\n6. [License](#license)\n\n\n## Setup\n The easiest way to add the Material DateTime Picker library to your project is by adding it as a dependency to your `build.gradle`\n```groovy\ndependencies {\n    implementation 'com.wdullaer:materialdatetimepicker:4.2.3'\n}\n```\n\nYou may also add the library as an Android Library to your project. All the library files live in ```library```.\n\nThe library also uses some Java 8 features, which Android Studio will need to transpile. This requires the following stanza in your app's `build.gradle`.\nSee https://developer.android.com/studio/write/java8-support.html for more information on Java 8 support in Android.\n```groovy\nandroid {\n  ...\n  // Configure only for each module that uses Java 8\n  // language features (either in its source code or\n  // through dependencies).\n  compileOptions {\n    sourceCompatibility JavaVersion.VERSION_1_8\n    targetCompatibility JavaVersion.VERSION_1_8\n  }\n}\n```\n\n## Using Material Date/Time Pickers\nThe library follows the same API as other pickers in the Android framework.\nFor a basic implementation, you'll need to\n\n1. Implement an `OnTimeSetListener`/`OnDateSetListener`\n2. Create a `TimePickerDialog`/`DatePickerDialog` using the supplied factory\n3. Theme the pickers\n\n### Implement an `OnTimeSetListener`/`OnDateSetListener`\nIn order to receive the date or time set in the picker, you will need to implement the `OnTimeSetListener` or\n`OnDateSetListener` interfaces. Typically this will be the `Activity` or `Fragment` that creates the Pickers. The callbacks use the same API as the standard Android pickers.\n```java\n@Override\npublic void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute, int second) {\n  String time = \"You picked the following time: \"+hourOfDay+\"h\"+minute+\"m\"+second;\n  timeTextView.setText(time);\n}\n\n@Override\npublic void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {\n  String date = \"You picked the following date: \"+dayOfMonth+\"/\"+(monthOfYear+1)+\"/\"+year;\n  dateTextView.setText(date);\n}\n```\n\n### Create a `TimePickerDialog`/`DatePickerDialog` using the supplied factory\nYou will need to create a new instance of `TimePickerDialog` or `DatePickerDialog` using the static `newInstance()` method, supplying proper default values and a callback. Once the dialogs are configured, you can call `show()`.\n```java\nCalendar now = Calendar.getInstance();\nDatePickerDialog dpd = DatePickerDialog.newInstance(\n  MainActivity.this,\n  now.get(Calendar.YEAR), // Initial year selection\n  now.get(Calendar.MONTH), // Initial month selection\n  now.get(Calendar.DAY_OF_MONTH) // Inital day selection\n);\n// If you're calling this from a support Fragment\ndpd.show(getFragmentManager(), \"Datepickerdialog\");\n// If you're calling this from an AppCompatActivity\n// dpd.show(getSupportFragmentManager(), \"Datepickerdialog\");\n```\n\n### Theme the pickers\nThe library contains 2 layout versions for each picker.\n\n* Version 1: this is the original layout. It is based on the layout google used in the kitkat and early material design era\n* Version 2: this layout is based on the guidelines google posted when launching android marshmallow. This is the default and still the most current design.\n\nYou can set the layout version using the factory\n```java\ndpd.setVersion(DatePickerDialog.Version.VERSION_2);\n```\n\nThe pickers will be themed automatically based on the current theme where they are created, based on the current `colorAccent`. You can also theme the dialogs via the `setAccentColor(int color)` method. Alternatively, you can theme the pickers by overwriting the color resources `mdtp_accent_color` and `mdtp_accent_color_dark` in your project.\n```xml\n\u003ccolor name=\"mdtp_accent_color\"\u003e#009688\u003c/color\u003e\n\u003ccolor name=\"mdtp_accent_color_dark\"\u003e#00796b\u003c/color\u003e\n```\n\nThe exact order in which colors are selected is as follows:\n\n1. `setAccentColor(int color)` in java code\n2. `android.R.attr.colorAccent` (if android 5.0+)\n3. `R.attr.colorAccent` (eg. when using AppCompat)\n4. `R.color.mdtp_accent_color` and `R.color.mdtp_accent_color_dark` if none of the others are set in your project\n\nThe pickers also have a dark theme. This can be specified globablly using the `mdtp_theme_dark` attribute in your theme or the `setThemeDark(boolean themeDark)` functions. The function calls overwrite the XML setting.\n```xml\n\u003citem name=\"mdtp_theme_dark\"\u003etrue\u003c/item\u003e\n```\n\n\n## Additional Options\n### [All] `setThemeDark(boolean themeDark)`\nThe dialogs have a dark theme that can be set by calling\n```java\ndialog.setThemeDark(true);\n```\n\n### [All] `setAccentColor(String color)` and `setAccentColor(int color)`\nSet the accentColor to be used by the Dialog. The String version parses the color out using `Color.parseColor()`. The int version requires a ColorInt bytestring. It will explicitly set the color to fully opaque.\n\n### [All] `setOkColor()` and `setCancelColor()`\nSet the text color for the OK or Cancel button. Behaves similar to `setAccentColor()`\n\n### [TimePickerDialog] `setTitle(String title)`  \nShows a title at the top of the `TimePickerDialog`\n\n### [DatePickerDialog] `setTitle(String title)`\nShows a title at the top of the `DatePickerDialog` instead of the day of the week\n\n### [All] `setOkText()` and `setCancelText()`  \nSet a custom text for the dialog Ok and Cancel labels. Can take a resourceId of a String. Works in both the DatePickerDialog and TimePickerDialog\n\n### [DatePickerDialog] `setMinDate(Calendar day)`\nSet the minimum valid date to be selected. Date values before this date will be deactivated\n\n### [DatePickerDialog] `setMaxDate(Calendar day)`\nSet the maximum valid date to be selected. Date values after this date will be deactivated\n\n### [TimePickerDialog] `setMinTime(Timepoint time)`  \nSet the minimum valid time to be selected. Time values earlier in the day will be deactivated\n\n### [TimePickerDialog] `setMaxTime(Timepoint time)`  \nSet the maximum valid time to be selected. Time values later in the day will be deactivated\n\n### [TimePickerDialog] `setSelectableTimes(Timepoint[] times)`  \nYou can pass in an array of `Timepoints`. These values are the only valid selections in the picker. `setMinTime(Timepoint time)`, `setMaxTime(Timepoint time)` and `setDisabledTimes(Timepoint[] times)` will further trim this list down. Try to specify Timepoints only up to the resolution of your picker (i.e. do not add seconds if the resolution of the picker is minutes).\n\n### [TimePickerDialog] `setDisabledTimes(Timepoint[] times)`  \nYou can pass in an array of `Timepoints`. These values will not be available for selection. These take precedence over `setSelectableTimes` and `setTimeInterval`. Be careful when using this without selectableTimes: rounding to a valid Timepoint is a very expensive operation if a lot of consecutive Timepoints are disabled. Try to specify Timepoints only up to the resolution of your picker (i.e. do not add seconds if the resolution of the picker is minutes).\n\n### [TimePickerDialog] `setTimeInterval(int hourInterval, int minuteInterval, int secondInterval)`  \nSet the interval for selectable times in the TimePickerDialog. This is a convenience wrapper around `setSelectableTimes`. The interval for all three time components can be set independently. If you are not using the seconds / minutes picker, set the respective item to 60 for better performance.\n\n### [TimePickerDialog] `setTimepointLimiter(TimepointLimiter limiter)`  \nPass in a custom implementation of `TimeLimiter`\nDisables `setSelectableTimes`, `setDisabledTimes`, `setTimeInterval`, `setMinTime` and `setMaxTime`\n\n### [DatePickerDialog] `setSelectableDays(Calendar[] days)`  \nYou can pass a `Calendar[]` to the `DatePickerDialog`. The values in this list are the only acceptable dates for the picker. It takes precedence over `setMinDate(Calendar day)` and `setMaxDate(Calendar day)`\n\n### [DatePickerDialog] `setDisabledDays(Calendar[] days)`  \nThe values in this `Calendar[]` are explicitly disabled (not selectable). This option can be used together with `setSelectableDays(Calendar[] days)`: in case there is a clash `setDisabledDays(Calendar[] days)` will take precedence over `setSelectableDays(Calendar[] days)`\n\n### [DatePickerDialog] `setHighlightedDays(Calendar[] days)`  \nYou can pass a `Calendar[]` of days to highlight. They will be rendered in bold. You can tweak the color of the highlighted days by overwriting `mdtp_date_picker_text_highlighted`\n\n### [DatePickerDialog] `showYearPickerFirst(boolean yearPicker)`  \nShow the year picker first, rather than the month and day picker.\n\n### [All] `OnDismissListener` and `OnCancelListener`  \nBoth pickers can be passed a `DialogInterface.OnDismissLisener` or `DialogInterface.OnCancelListener` which allows you to run code when either of these events occur.\n```java\ntpd.setOnCancelListener(new DialogInterface.OnCancelListener() {\n    @Override\n    public void onCancel(DialogInterface dialogInterface) {\n      Log.d(\"TimePicker\", \"Dialog was cancelled\");\n    }\n});\n```\n\n### [All] `vibrate(boolean vibrate)`  \nSet whether the dialogs should vibrate the device when a selection is made. This defaults to `true`.\n\n### [All] `dismissOnPause(boolean dismissOnPause)`  \nSet whether the picker dismisses itself when the parent Activity is paused or whether it recreates itself when the Activity is resumed.\n\n### [All] `setLocale(Locale locale)`  \nAllows the client to set a custom locale that will be used when generating various strings in the pickers. By default the current locale of the device will be used. Because the pickers will adapt to the Locale of the device by default you should only have to use this in very rare circumstances.\n\n### [DatePickerDialog] `autoDismiss(boolean autoDismiss)`\nIf set to `true` will dismiss the picker when the user selects a date. This defaults to `false`.\n\n### [TimepickerDialog] `enableSeconds(boolean enableSconds)` and `enableMinutes(boolean enableMinutes)`\nAllows you to enable or disable a seconds and minutes picker on the `TimepickerDialog`. Enabling the seconds picker, implies enabling the minutes picker. Disabling the minute picker will disable the seconds picker. The last applied setting will be used. By default `enableSeconds = false` and `enableMinutes = true`.\n\n### [DatePickerDialog] `setTimeZone(Timezone timezone)` *deprecated*  \nSets the `Timezone` used to represent time internally in the picker. Defaults to the current default Timezone of the device.\nThis method has been deprecated: you should use the `newInstance()` method which takes a Calendar set to the appropriate TimeZone.\n\n### [DatePickerDialog] `setDateRangeLimiter(DateRangeLimiter limiter)`\nProvide a custom implementation of DateRangeLimiter, giving you full control over which days are available for selection. This disables all of the other options that limit date selection.\n\n### `getOnTimeSetListener()` and `getOnDateSetListener()`  \nGetters that allow the retrieval of a reference to the callbacks currently associated with the pickers\n\n### [DatePickerDialog] `setScrollOrientation(ScrollOrientation scrollOrientation)` and `getScrollOrientationi()`\nDetermines whether months scroll `Horizontal` or `Vertical`. Defaults to `Horizontal` for the v2 layout and `Vertical` for the v1 layout\n\n## FAQ\n\n### Why does the `DatePickerDialog` return the selected month -1?\nIn the java `Calendar` class months use 0 based indexing: January is month 0, December is month 11. This convention is widely used in the java world, for example the native Android DatePicker.\n\n### How do I use a different version of a support library in my app?\nThis library depends on some androidx support libraries. Because the jvm allows only one version of a fully namespaced class to be loaded, you will run into issues if your app depends on a different version of a library than the one used in this app. Gradle is generally quite good at resolving version conflicts (by default it will retain the latest version of a library), but should you run into problems (eg because you disabled conflict resolution), you can disable loading a specific library for MaterialDateTimePicker.\n\nUsing the following snippet in your apps `build.gradle` file you can exclude this library's transitive appcompat library dependency from being installed.\n\n```groovy\nimplementation ('com.wdullaer:materialdatetimepicker:4.2.3') {\n        exclude group: 'androidx.appcompat'\n        exclude group: 'androidx.recyclerview'\n}\n```\n\nMaterialDateTimepicker uses the following androidx libraries:\n\n```groovy\nimplementation 'androidx.appcompat:appcompat:1.0.2'\nimplementation 'androidx.recyclerview:recyclerview:1.0.0'\n```\n\nExcluding a dependency will work fine as long as the version your app depends on is recent enough and google doesn't release a version in the future that contains breaking changes. (If/When this happens I will try hard to document this). See issue [#338](https://github.com/wdullaer/MaterialDateTimePicker/issues/338) for more information.\n\n### How do I turn this into a year and month picker?\nThis DatePickerDialog focuses on selecting dates, which means that it's central design element is the day picker. As this calendar like view is the center of the design it makes no sense to try and disable it. As such selecting just years and months, without a day, is not in scope for this library and will not be added.\n\n### How do I select multiple days?\nThe goal of this library is to implement the Material Design Date picker. This design is focused on picking exactly 1 date (with a large textual representation at the top). It would require quite a bit of redesigning to make it useful to select multiple days. As such this feature is currently out of scope for this library and will not be added. If you happen to make a library that implements this, based on this code or not, drop me a line and I'll happily link to it.\n\n### How do I use my custom logic to enable/disable dates?\n`DatePickerDialog` exposes some utility methods to enable / disable dates for common scenario's. If your needs are not covered by these, you can supply a custom implementation of the `DateRangeLimiter` interface.\nBecause the `DateRangeLimiter` is preserved when the `Dialog` pauzes, your implementation must also implement `Parcelable`.\n\n```java\nclass MyDateRangeLimiter implements DateRangeLimiter {\n  public MyDateRangeLimiter(Parcel in) {\n\n  }\n\n  @Override\n  public int getMinYear() {\n    return 1900;\n  }\n\n  @Override\n  public int getMaxYear() {\n    return 2100;\n  }\n\n  @Override\n  public Calendar getStartDate() {\n    Calendar output = Calendar.newInstance();\n    output.set(Calendar.YEAR, 1900);\n    output.set(Calendar.DAY_OF_MONTH, 1);\n    output.set(Calendar.MONTH, Calendar.JANUARY);\n    return output;\n  }\n\n  @Override\n  public Calendar getEndDate() {\n    Calendar output = Calendar.newInstance();\n    output.set(Calendar.YEAR, 2100);\n    output.set(Calendar.DAY_OF_MONTH, 1);\n    output.set(Calendar.MONTH, Calendar.JANUARY);\n    return output;\n  }\n\n  @Override\n  public boolean isOutOfRange(int year, int month, int day) {\n    return false;\n  }\n\n  @Override\n  public Calendar setToNearestDate(Calendar day) {\n      return day;\n  }\n\n  @Override\n  public void writeToParcel(Parcel out) {\n\n  }\n\n  @Override\n  public int describeContents() {\n    return 0;\n  }\n\n  public static final Parcelable.Creator\u003cMyDateRangeLimiter\u003e CREATOR\n        = new Parcelable.Creator\u003cMyDateRangeLimiter\u003e() {\n    public MyDateRangeLimiter createFromParcel(Parcel in) {\n        return new MyDateRangeLimiter(in);\n    }\n\n    public MyDateRangeLimiter[] newArray(int size) {\n        return new MyDateRangeLimiter[size];\n    }\n  };\n}\n```\n\nWhen you provide a custom `DateRangeLimiter` the built-in methods for setting the enabled / disabled dates will no longer work. It will need to be completely handled by your implementation.\n\n### Why do the OK and Cancel buttons have the accent color as a background when combined with the Material Components library\n[Material Components](https://github.com/material-components/material-components-android) replaces all instances of `Button` with an instance of `MaterialButton` when using one of its regular themes: https://github.com/material-components/material-components-android/blob/master/docs/getting-started.md#material-components-themes  \nThe default version of `MaterialButton` uses `colorPrimary` as the background color. Because Material Components replaces the View replacer with their own implementation there is not much I can do to fix this from this library.\n\nThere are a few workarounds:\n* Use one of the bridge themes, which do not replace the View Inflater\n* Overwrite the style of the mdtp buttons with one that inherits from Material Components text buttons, as described [here](https://github.com/wdullaer/MaterialDateTimePicker/issues/523#issuecomment-477349333):\n    ```xml\n    \u003cstyle name=\"mdtp_ActionButton.Text\" parent=\"Widget.MaterialComponents.Button.TextButton.Dialog\"/\u003e\n    ```\n* Overwrite the View inflater again in your application theme by adding the following statement in your application theme:\n    ```xml\n  \u003citem name=\"viewInflaterClass\"\u003eandroidx.appcompat.app.AppCompatViewInflater\u003c/item\u003e\n    ```\n  You will then need to explicitly use `MaterialButton` in your application rather than `Button`\n\n### Why are my callbacks lost when the device changes orientation?\nThe simple solution is to dismiss the pickers when your activity is paused.\n\n```java\ntpd.dismissOnPause(true);\n```\n\nIf you do wish to retain the pickers when an orientation change occurs, things become a bit more tricky.\n\nBy default, when an orientation changes occurs android will destroy and recreate your entire `Activity`. Wherever possible this library will retain its state on an orientation change. The only notable exceptions are the different callbacks and listeners. These interfaces are often implemented on `Activities` or `Fragments`. Naively trying to retain them would cause memory leaks. Apart from explicitly requiring that the callback interfaces are implemented on an `Activity`, there is no safe way to properly retain the callbacks, that I'm aware off.\n\nThis means that it is your responsibility to set the listeners in your `Activity`'s `onResume()` callback.\n\n```java\n@Override\npublic void onResume() {\n  super.onResume();\n\n  DatePickerDialog dpd = (DatePickerDialog) getFragmentManager().findFragmentByTag(\"Datepickerdialog\");\n  TimePickerDialog tpd = (TimePickerDialog) getFragmentManager().findFragmentByTag(\"TimepickerDialog\");\n\n  if(tpd != null) tpd.setOnTimeSetListener(this);\n  if(dpd != null) dpd.setOnDateSetListener(this);\n}\n```\n\n\n## Potential Improvements\n* Landscape timepicker can use some improvement\n* Code cleanup: there is a bit too much spit and ductape in the tweaks I've done.\n* Document all options on both pickers\n\n\n## License\n    Copyright (c) 2015 Wouter Dullaert\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwdullaer%2FMaterialDateTimePicker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwdullaer%2FMaterialDateTimePicker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwdullaer%2FMaterialDateTimePicker/lists"}