将java.util.Date转换为请求的不同时区

时间:2016-12-03 18:08:02

标签: java mongodb spring-boot timezone java.util.date

根据请求网址,我必须将日期转换为不同的请求时区,并将日期和时间作为字符串返回。我正在使用带弹簧启动的java 8和mongo 3.2

所以在服务方法中,我首先将时区设置如下,

TimeZone.setDefault(TimeZone.getTimeZone(TIME_ZONE))

但我注意到,它将改变整个java应用程序的时区。因此,即使方法退出,时区仍将是我之前设置的时区。

因此,而不是setDefault方法级别,我将其专门设置在SimpleDateFormat中,如下所示,

(赋值是一个Assignmet文档类,其java.util.Date作为名为assignmentEndDate的属性映射到mongodb集合。在mongo db assignmentEndDate存储为UTC)

   java.text.DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy'T'HH:mm:ss.SSS");
   formatter.setTimeZone(TimeZone.getTimeZone(timezone));
   Date assignmentEndDate = assignment.getAssignmentEndDate();
   formatter.format(assignmentEndDate);

这样它就不会改变应用程序级别的时区。对于这种情况,这是正确的方法吗?

1 个答案:

答案 0 :(得分:3)

利用Java 8中包含的新日期时间api。

  <html >
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
    
    <title>Beauty Care</title>
    <!-- MyBeauty , BeautyCare,BeautyEye,BeautyShop,BeautySalon !-->

    <link href="lib/ionic/css/ionic.css" rel="stylesheet">
    <script src="lib/ionic/js/ionic.bundle.js"></script>
    <script src="js/app.js"></script>
    <script src="js/Service.js"></script>
    <script src="js/Controllers.js"></script>
   <!--  <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBLSOMXsw_sxOlRpyBj16g5iaewLHDpSes&libraries=places"></script>
 -->
  </head>

  <body ng-app="BeautyCare">
    
    <ion-nav-bar class="bar-positive">
      <ion-nav-back-button>
      </ion-nav-back-button>
    </ion-nav-bar>
             
    <ion-nav-view></ion-nav-view>


    <script id="templates/tabs.html" type="text/ng-template">
      <ion-tabs class="tabs-icon-top tabs-positive">

        <ion-tab title="" icon="ion-ios-cart" href="#/tab/Store">
          <ion-nav-view name="Store-tab"></ion-nav-view>
        </ion-tab>

        <ion-tab title="" icon="ion-navicon-round"  href="#/tab/SalonGalary">
          <ion-nav-view name="SalonGalary-tab"></ion-nav-view>
        </ion-tab>

        <ion-tab title="" icon="ion-android-person" ui-sref="tabs.Profile">
          <ion-nav-view name="Profile-tab"></ion-nav-view>
        </ion-tab>

        <ion-tab title="" icon="ion-ios-bell" ui-sref="tabs.Alerts">
          <ion-nav-view name="Alerts-tab"></ion-nav-view>
        </ion-tab>
      </ion-tabs>
    </script>

    <script id="templates/Store.html" type="text/ng-template">
      <ion-view view-title="BeautyCare Store" cache-view="false">
        <ion-content class="padding" >
        <ion-list>
      <ion-item class="item-icon-right" ng-repeat="item in items">
          <h1>{{item.TimeStamp }}</h1>
          <!--<p>{{ item.title}}</p> !-->
          <i class="icon ion-chevron-left icon-accessory"></i>
          <ion-option-button class="button-positive" ng-click="viewFriend(viewFriend(data.idfriends))">View Friend</ion-option-button>
          <ion-option-button class="button-assertive" ng-click="deleteFriend(remove(data.idfriends))">Delete</ion-option-button>
      </ion-item>
    </ion-list>
        </ion-content>
      </ion-view>
    </script>

    
    
    <script id="templates/SalonGalary.html" type="text/ng-template">
      <ion-view view-title="BeautyCare Salon Galary" cache-view="false">
        <ion-content class="padding">
         
        </ion-content>
      </ion-view>
    </script>

    
    <script id="templates/Profile.html" type="text/ng-template">
      <ion-view title="My Profile" cache-view="false">
        <ion-content>
         
        </ion-content>
      </ion-view>
    </script>

     <script id="templates/Alerts.html" type="text/ng-template">
      <ion-view view-title="My Alerts" cache-view="false">
        <ion-content class="padding">
          
        </ion-content>
      </ion-view>
    </script>


  </body>
</html>
  
    

</body>
</html>

您可以从 Instant 开始,这是一个java util date equalive。

ZoneId zoneId = ZoneId.of("America/Chicago");

或者

你也可以先开始  使用 ZonedDateTime

您可以将日期时间设为 LocalDateTime ,时区不可知类并转换为ZonedDateTime。

Instant instant = Instant.now();
ZonedDateTime zonedDateTime = instant.atZone(zoneId);

您可以轻松切换旧日期时间类和&amp;通过访问每个新/旧日期时间类的辅助方法来获得新的时间。

保存到mongo数据库时更改为java util date

LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zdt = ldt.atZone(zoneId);

所有新的日期时间api都内置了默认格式化程序。

//From ZonedDateTime to java util date.
Date oldDate = Date.from(zdt.toInstant());

//From Instant to java util date
Date oldDate = Date.from(instant);

//From Date to Instant.
Instant instant = date.toInstant();

对于特定格式,您始终可以将 DateTimeFormatter 传递给以下方法。

//2007-12-03T10:15:30-06:00[America/Chicago]
String zonedDatetime = zonedDateTime.toString();