如何使String从日期Final格式化?

时间:2019-03-26 09:21:47

标签: android flutter

我想为新创建的注释实现日期,问题是它正在更新并且不保留第一个值

  var now = new DateTime.now();
  var formatter = new DateFormat('yyyy-MM-dd' + ' At ' + 'H:m');
  String date;`
  date = formatter.format(now);

4 个答案:

答案 0 :(得分:0)

我认为您在错误的位置添加了代码。您添加代码的位置可能会一次又一次刷新。调试它可能会对您有所帮助。

答案 1 :(得分:0)

我了解您希望确保您获得了当前时间一次,并保留了该时间,而不会在以后进行更新。为此,您可以使用以下条件包装代码:

if (now == null) {
    now = new DateTime.now();
    ...
}

这只会在您的代码首次运行时获得当前时间一次,并且以后将忽略它。如果您希望该值在活动被破坏/碎片替换后仍然存在,请考虑将值存储在共享的首选项或您选择的其他数据结构上。首次创建活动/片段时,请检查其是否具有值,或者将其保留为空。

答案 2 :(得分:0)

我认为您的代码正在为您正在执行的每个setState设置日期,因此时间在更改。那为什么不在initState

中设置此代码

所以在您的State

String date;
@override
  void initState() {
    var now = new DateTime.now();
    var formatter = new DateFormat('yyyy-MM-dd' + ' At ' + 'H:m');
    date = formatter.format(now);
    super.initState();
  }

答案 3 :(得分:-1)

尝试此代码。

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val myRunnableThread = CountDownRunner()
    var myThread = Thread(myRunnableThread)
    myThread.start()

}
fun doWork() {
    runOnUiThread {
        try {
            val dt = Date()

            var formatter = SimpleDateFormat("hh:mm:ss a")
            tvTime.text = formatter.format(dt)
        } catch (e: Exception) {
        }
    }
}


internal inner class CountDownRunner : Runnable {
    // @Override
    override fun run() {
        while (!Thread.currentThread().isInterrupted) {
            try {
                doWork()
                Thread.sleep(1000) // Pause of 1 Second
            } catch (e: InterruptedException) {
                Thread.currentThread().interrupt()
            } catch (e: Exception) {
            }

        }
    }
}
}