【问题标题】:Convert system time as string to Timestamp将系统时间作为字符串转换为时间戳
【发布时间】:2023-12-15 22:37:01
【问题描述】:

我正在尝试使用 Java 获取计算机的时间并使用 SimpleDateFormat 对象按特定顺序对其进行格式化,但它不会格式化;请帮忙。

这是我的代码:

java.util.Date parsedDate = null;      
try {   
    DateFormat dateFormat = new SimpleDateFormat("HH:mm");  
    parsedDate = dateFormat.parse(dateFormat.format(new java.util.Date()));
}catch(ParseException e){
}  
Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());

【问题讨论】:

  • (1) 请具体说明期望的结果以及观察到的结果有何不同。 (2) 不要吞下异常。特别是这一点可能会为我们提供有关问题所在的重要信息。 (3) SimpleDateFormat 早已过时并且出了名的麻烦。我推荐java.time, the modern Java date and time API,而不是。 (4) Timestamp 没有也不能在其中保存格式。这只是一个时间点。
  • 从不写一个空的 catch 块。异常会告诉你哪里出了问题——如果你忽略它们,你就会使你的代码故障排除变得非常困难。至少,catch 块需要显示堆栈跟踪,例如e.printStackTrace()

标签: java date timestamp simpledateformat time-format


【解决方案1】:

tl;博士

LocalTime
    .now( ZoneId.of( "Pacific/Auckland" ) ) 
    .toString() 

java.time

您正在使用令人烦恼的旧遗留类,这些类现在已被现代 java.time 类所取代。完全避免使用旧课程。

以最高纳秒的分辨率获取 UTC 中的当前时刻。

Instant instant = Instant.now() ;

要通过特定地区的挂钟时间查看同一时刻,请应用时区。

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atone( z ) ;

要仅使用没有日期和时区的时间,请提取 LocalTime 对象。

LocalTime lt = zdt.toLocalTime() ;

如果“按特定顺序格式化”是指排序……这些对象知道如何排序。不需要仅用于排序的字符串。

List<LocalTime> times = new ArrayList<>() ;
times.add( lt ) ;
…
Collections.sort( times ) ;

生成一个字符串以显示给用户。 java.time 类默认使用标准 ISO 8601 格式来生成/解析字符串。

String output = lt.toString() ;

对于其他格式,请使用DateTimeFormatter

DateTimeFormatter f = DateTimeFormatter.ofPattern( "HH:mm" ) ;
String output = lt.format( f ) ;

所有这些都在 Stack Overflow 上处理过很多次。搜索更多信息和讨论。

【讨论】:

    【解决方案2】:

    嗨 user8545027 我修改了你的代码,现在它对我有用。我还使用 ThreadLocal 使 SimpleDateFormat 对多线程安全。

    package com.java;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class Test {
    
        private ThreadLocal<SimpleDateFormat> threadSafeDateFormat = new ThreadLocal<SimpleDateFormat>() {
            @Override
            protected SimpleDateFormat initialValue() {
                return new SimpleDateFormat("HH:mm");
            }
        };
    
        String formatDate() {
            SimpleDateFormat format = threadSafeDateFormat.get();
            String timeStamp = format.format(new Date());
            return timeStamp;
        }
    
    
        public static void main(String[] args) {
            Test test = new Test();
            System.out.println(test.formatDate());
        }
    }
    

    如果有任何问题,请告诉我。希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      用途:

      public class Basics {
      
        public static void main(String[] args) {
      
          DateFormat dateFormat = new SimpleDateFormat("HH:mm");
          String date = dateFormat.format(System.currentTimeMillis());
          System.out.println(date);   
        }
      }
      

      【讨论】:

      • 我看不出它应该有什么不同。您是否从计算机上的两个代码行得到两个不同的结果?
      • 使用上面的代码得到的结果是“1970-01-01 21:49:00.0”希望这是你在找的。​​span>
      • 没用,我要找的结果是21:49
      • 还是一样的结果“1970-01-01 08:49:00.0”
      • 我告诉过你我没有得到的结果是我得到了它:“1970-01-01 08:49:00.0”,我只想要以下格式的时钟:“ 08:44"-->"HH:mm"
      最近更新 更多